检查两个节点之间的单个源最短路径是否唯一

时间:2018-07-15 10:32:11

标签: algorithm graph-theory breadth-first-search

给定一个无权,无向的图,如何检查是否存在唯一的最短路径或不止一条?

谢谢。

1 个答案:

答案 0 :(得分:2)

您可以使用Breadth-first search的修改版本(我将其称为modBFS)算法,该算法返回两个节点之间的最短路径,该修改包括标记您访问的第一个节点(不包括起始节点),因此下次调用该算法时,将不会访问该算法,然后再次调用modBFS,但是这次将不会访问modBFS先前标记的节点(即您访问的第一个节点),因此,如果节点之间存在其他路径,它将被访问返回(注意,它将再次返回最短路径),您只需检查距离是否相同即可。然后,您可以重复此步骤以标记您要访问的第二个节点,然后标记第三个节点,以此类推,但是请记住保留您获得的第一个路径的副本,因为您需要它知道您必须标记的节点为伪代码

modBFS(start_node,end_node){
    path=BFS(start_node,end_node)
    for i=0 to path.length
        path[i].mark=0
        path1=BFS(start_node,end_node)
        if path1.lenght == path.lenght 
            return true
        path[i].mark=1
    return false

仅当path [i] .mark等于1时,BFS才会访问节点