bidirectional_shortest_path
和bidirectional_dijkstra
(其中Dijkstra的算法,所有重量的所有边缘都归类为BFS)。 (请注意,这两个实现不限于无方向的图。)自然问题是:可以修改双向广度的搜索算法,以便能够返回未加权的digraph中两个特定顶点之间的最短路径?
(1)从理论上讲,YES
.LET
u
和
v
之间的最短路径具有长度d
。双向BFS实质上可以在距离d/2
distance和距离的所有顶点处找到所有顶点,并且这两组具有非空交点u
d-d/2
的顶点。对于v
S
,convateNate(笛卡尔产物)从
u
到
v
的每条路径从
S
到
w
的每个路径。在两种情况下,可以从
S
开始恢复路径的一半。这将准确地提供最短的道路。(2)在实施方面,您可能必须弄脏手,因为这似乎不是一个普遍的问题。
(3)一对顶点之间的最短路径数可能是指数级的。在这种情况下,查找最短路径的速度将由算法输出单个路径的速度主导。那么,您使用的是单向还是二向BF并不重要。仅当您知道这样的途径很少时,此选择才重要。