UNPKG

lite-pathfindings

Version:

Simple, intuitive and lightweight pathfinding algorithms

61 lines (48 loc) 1.23 kB
module.exports = { init(dist) { let v = dist.length let next = initNext(dist); for(let k=0; k < v; k++) for(let i=0; i < v; i++) for(let 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(next, u, v) { if(next[u][v] == undefined) return []; let path = [u]; while(u != v) { u = next[u][v]; path.push(u); } return path; }, getWeight(matrix, vertex1, vertex2) { return matrix[vertex1][vertex2]; }, containNegativeCycle(matrix) { let length = matrix.length; for(let i = 0; i < length; i++) { for(let j = 0; j < length; j++) { if(matrix[i][j] < 0) return true; } } return false; } }; let initNext = (dist) => { let v = dist.length; let next = new Array(v); for(let i = 0; i < v; i++) { next[i] = new Array(v); for(let j = 0; j < v; j++) if(isFinite(dist[i][j]) && dist[i][j] != 0) next[i][j] = j; } return next; };