Graph Julia'的多个源顶点;s图Dijkstra算法

Graph Julia'的多个源顶点;s图Dijkstra算法,graph,julia,dijkstra,Graph,Julia,Dijkstra,我试图计算所有顶点的距离。文献表明Dijkstra算法可以作为源多个顶点的参数,但并没有解释输入类型。当我输入[v1]时,它适用于一个顶点。我试图找到这个参数的类型,它说它是数组{ExVertex,1},所以我尝试输入方法顶点(g1),但它不起作用。有什么帮助吗 using Graphs g1 = Graphs.graph(Graphs.ExVertex[], Graphs.ExEdge{Graphs.ExVertex}[], is_directed=false) d = "dist" v1

我试图计算所有顶点的距离。文献表明Dijkstra算法可以作为源多个顶点的参数,但并没有解释输入类型。当我输入[v1]时,它适用于一个顶点。我试图找到这个参数的类型,它说它是数组{ExVertex,1},所以我尝试输入方法顶点(g1),但它不起作用。有什么帮助吗

using Graphs

g1 = Graphs.graph(Graphs.ExVertex[], Graphs.ExEdge{Graphs.ExVertex}[], is_directed=false)
d = "dist"

v1 = add_vertex!(g1, "a")
v2 = add_vertex!(g1, "b")
v3 = add_vertex!(g1, "c")
v4 = add_vertex!(g1, "d")
v5 = add_vertex!(g1, "e")
e12 = add_edge!(g1, v3, v1)
e12.attributes[d]=1.0

e13 = add_edge!(g1, v3, v2)
e13.attributes[d]=2.0

e14 = add_edge!(g1, v3, v4)
e14.attributes[d]=3.0

e15 = add_edge!(g1, v3, v5)
e15.attributes[d]=4.0

epi = AttributeEdgePropertyInspector{Float64}(d)
sp = dijkstra_shortest_paths(g1, epi, ???) # what to input for more source vertices

旁白:可能是因为
dijkstra_最短路径
与第二个参数一起构成了一个
图形。AbstractEdgePropertyInspector
只出现在一个版本中,该版本将顶点的
向量
作为第三个参数,即使对于单个源,也强制使用
[v1]

有关更多信息,请在REPL处使用
?dijkstra_最短路径

关于多个来源:
dijkstra_最短路径
计算从一组顶点到所有其他顶点的距离(和路径)。第三个参数是源顶点组,即可以零成本(移动或距离)到达这些源顶点中的任何一个

如果目的是计算从所有顶点到单个目标的距离,
dijkstra_最短路径
仍然可以使用,方法是将目标顶点(例如
v1
)作为单个源(第三个参数)并反转距离(如果图形指向)


或者,如果目的是从多个源查找到所有顶点的(不同)距离,则应多次运行dijkstra_最短路径。这与查找多个源的距离不同,这意味着到目标顶点的路径可以选择从哪个源顶点开始。

要计算所有对顶点之间的距离,有更有效的算法(请参见
floyd_warshall
)。目的是计算图中每个顶点到所有其他顶点的距离。我通过在循环中多次调用Dijkstra找到了答案,但我想知道是否有最干净的解决方案。所以前面的评论应该适用(Floyd Warshall)。对语法进行<代码> > FuyDyWARWRES</COD>。我解决了这个问题,但是现在出现了新的问题,现在我必须考虑从源到目标的多条最短路径。多路径是可能的。在极端情况下,最短路径的数量可能是指数级的。选择其中一个很容易。查找所有代码也很容易,但可能需要很长时间(例如,考虑两个点通过一系列交叉连接——ASCII图形化:<代码>源目的地< /代码>)