UNPKG

lite-pathfindings

Version:

Simple, intuitive and lightweight pathfinding algorithms

72 lines (57 loc) 1.29 kB
"use strict"; module.exports = { init: function init(EdgeMap, sDeb) { var A = EdgeMap; var S = []; for (var vertex in A) { S.push(vertex); } var d = []; S.forEach(function (s) { d[s] = Number.POSITIVE_INFINITY; }); d[sDeb] = 0; var Q = S.concat(); var predecessor = []; var _loop = function _loop() { var mini = Number.POSITIVE_INFINITY; var s1 = -1; Q.forEach(function (s) { if (s1 == -1 || d[s] < mini) { mini = d[s]; s1 = s; } }); Q.splice(Q.indexOf(s1), 1); for (var s2 in A[s1]) { if (d[s2] > d[s1] + A[s1][s2]) { d[s2] = d[s1] + A[s1][s2]; predecessor[s2] = s1; } } }; while (Q.length > 0) { _loop(); } return predecessor; }, getPath: function getPath(predecessor, sDeb, sEnd) { var A = []; var s = sEnd; while (s != sDeb) { A.push(s); s = predecessor[s]; } A.push(sDeb); return A.reverse(); }, getWeight: function getWeight(edgeMap, path) { var weight = 0; var vertex = undefined; path.forEach(function (v) { if (vertex != undefined) weight += edgeMap[vertex][v]; vertex = v; }); return weight; } };