JavaScript - 图表中数百个节点的最短路径

时间:2015-10-04 16:20:47

标签: javascript jquery

我试图弄清楚如何计算许多节点到根节点的最短路径,但我不知道如何以正确的方式做到这一点。节点以某种方式相互连接,因此根节点总是有多条路径。

我有一个包含所有节点的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的数组。

谢谢。

2 个答案:

答案 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。