给定一个无权,无向的图,如何检查是否存在唯一的最短路径或不止一条?
谢谢。
答案 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才会访问节点