我已经搜索了几周,想找到一种用JavaScript计算最短路径的方法。我一直在尝试使用Groner(非常恰当地命名)的书《数据结构与算法》中的代码,在https://github.com/loiane/javascript-datastructures-algorithms/tree/master/chapter09上。
我一直发现的问题是,代码非常定制化,几乎不可能重写以生成所需的结果。我希望能够从任何给定的顶点到任何其他顶点获得最短路径,而不仅仅是像Groner编码的那样从A开始的所有内容列表。例如,我想要获取从F到B的路径,或者从C到A的路径。
完整的代码在这里:http://jsfiddle.net/8cn7e2x8/
有人可以帮忙吗?
var graph = new Graph();
var myVertices = ['A','B','C','D','E','F'];
for (var i=0; i<myVertices.length; i++) {
graph.addVertex(myVertices[i]);
}
graph.addEdge('A', 'B');
graph.addEdge('B', 'C');
graph.addEdge('B', 'E');
graph.addEdge('C', 'D');
graph.addEdge('C', 'E');
graph.addEdge('C', 'G');
graph.addEdge('D', 'E');
graph.addEdge('E', 'F');
graph.dfs();
console.log('********* sortest path - BFS ***********');
var shortestPathA = graph.BFS(myVertices[0]);
//from A to all other vertices
var fromVertex = myVertices[0];
for (i = 1; i < myVertices.length; i++) {
var toVertex = myVertices[i],
path = new Stack();
for (var v = toVertex; v !== fromVertex; v = shortestPathA.predecessors[v]) {
path.push(v);
}
path.push(fromVertex);
var s = path.pop();
while (!path.isEmpty()) {
s += ' - ' + path.pop();
}
console.log(s);
}