lite-pathfindings
Version:
Simple, intuitive and lightweight pathfinding algorithms
65 lines (51 loc) • 1.21 kB
JavaScript
;
/*
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();
}
};