因此,对于具有N x N
个节点的图形,我有一个大小为N
的邻接矩阵。我想通过此矩阵进行Depth First Search,以查找路径是否存在从Source
节点到Destination
节点。如果它存在,我想打印路径。
在下面的伪代码中,它使用矩阵/图形G
来查找可以使用v
的起始节点访问的所有顶点。我如何修改此算法,以便我可以得到类似的内容:procedure DFS(G,v,d)
其中d
是我要搜索的目标节点?
procedure DFS(G,v):
label v as discovered
for all edges from v to w in G.adjacentEdges(v) do
if vertex w is not labeled as discovered then
recursively call DFS(G,w)
另外作为旁注,我如何添加返回其发现的路径的所有边的总重量的能力?
答案 0 :(得分:2)
需要以两种方式修改算法
在下面的伪代码中,路径变量P
作为空列表开始。找到目标后,目标节点将放在P
中。然后,当每个递归级别返回时,当前节点w
将附加到路径。当顶级调用返回时,P
包含完整路径。只有一个问题,路径是反向的:目的地到源头。所以你必须扭转它。
procedure DFS(G,v,d,P=empty):
if v equals d
initialize P with d
return P
label v as discovered
for all edges from v to w in G.adjacentEdges(v) do
if vertex w is not labeled as discovered then
recursively call DFS(G,w,d,P)
if P is not empty
append v to P
return P
return empty