UNPKG

lite-pathfindings

Version:

Simple, intuitive and lightweight pathfinding algorithms

65 lines (51 loc) 1.21 kB
"use strict"; /* L'algorithme de Djikstra permet de calculer les plus court chemins entre un sommet défini et tous les autres sommets, orienté ou non et pondéré */ 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 predecesseur = []; 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]; predecesseur[s2] = s1; } } }; while (Q.length > 0) { _loop(); } return predecesseur; }, getPath: function getPath(predecesseur, sDeb, sFin) { var A = []; var s = sFin; while (s != sDeb) { A.push(s); s = predecesseur[s]; } A.push(sDeb); return A.reverse(); } };