UNPKG

lite-pathfindings

Version:

Simple, intuitive and lightweight pathfinding algorithms

58 lines (49 loc) 1.27 kB
"use strict"; 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; };