lite-pathfindings
Version:
Simple, intuitive and lightweight pathfinding algorithms
58 lines (49 loc) • 1.27 kB
JavaScript
;
module.exports = {
init: function init(dist) {
var v = dist.length;
var next = initNext(dist);
for (var k = 0; k < v; k++) {
for (var i = 0; i < v; i++) {
for (var j = 0; j < v; j++) {
if (dist[i][j] > dist[i][k] + dist[k][j]) {
dist[i][j] = dist[i][k] + dist[k][j];
next[i][j] = next[i][k];
}
}
}
}return next;
},
getPath: function getPath(next, u, v) {
if (next[u][v] == undefined) return [];
var path = [u];
while (u != v) {
u = next[u][v];
path.push(u);
}
return path;
},
getWeight: function getWeight(matrix, vertex1, vertex2) {
return matrix[vertex1][vertex2];
},
containNegativeCycle: function containNegativeCycle(matrix) {
var length = matrix.length;
for (var i = 0; i < length; i++) {
for (var j = 0; j < length; j++) {
if (matrix[i][j] < 0) return true;
}
}
return false;
}
};
var initNext = function initNext(dist) {
var v = dist.length;
var next = new Array(v);
for (var i = 0; i < v; i++) {
next[i] = new Array(v);
for (var j = 0; j < v; j++) {
if (isFinite(dist[i][j]) && dist[i][j] != 0) next[i][j] = j;
}
}
return next;
};