我试图弄清楚如何计算许多节点到根节点的最短路径,但我不知道如何以正确的方式做到这一点。节点以某种方式相互连接,因此根节点总是有多条路径。
我有一个包含所有节点的js对象,如果它是以下是一个片段:
var nodes = {
11420 : { // no out, but many other nodes have 11420 in their out
out : []
},
18866 : {
out : [11420]
},
739 : {
out : [18866]
},
1957 : {
out : [739]
},
33296 : {
out : [1957, 36774]
},
57264 : {
out : [33296]
},
54447 : { // root
out : [57264]
},
37569 : {
out : [36542, 57264]
}
// ... 1500 nodes more
}
如何计算节点11420到根54447的最短路径? 结果应该是一个包含节点ID的数组。
谢谢。
答案 0 :(得分:2)
Demo 在演示中有一个缩小的代码就是这样:https://raw.githubusercontent.com/andrewhayward/dijkstra/master/graph.js
var nodes =
{
"11420" :
{
"18866":1
},
"18866" :
{
"11420":1,
"739":1
},
"739" :
{
"18866":1,
"1957":1
},
"1957" :
{
"739":1 ,
"33296":1
},
"33296" :
{
"1957":1,
"36774":1,
"57264":1
},
"57264" :
{
"33296":1,
"54447" :1
},
"54447" :
{
"57264":1
},
"37569" :
{
"36542":1,
"57264":1
}
};
var graph = new Graph(nodes);
var result = graph.findShortestPath('11420', '54447');
console.log(result);
$("#yoo").html("["+result.join()+"]");
答案 1 :(得分:1)
阅读Djikstra's Algorithm以查找图表中节点的最短路径。 This page似乎有一个很好的描述。一般算法基于加权图(如果连接两个节点,则存在"权重"或"成本"与遍历节点之间的边缘相关联);在您的情况下,您可以假设每个重量为1。