使用邻接矩阵修改深度优先搜索算法以搜索特定的端节点

时间:2018-04-27 17:47:19

标签: algorithm pseudocode adjacency-matrix

因此,对于具有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)

另外作为旁注,我如何添加返回其发现的路径的所有边的总重量的能力?

1 个答案:

答案 0 :(得分:2)

需要以两种方式修改算法

  1. 找到目的地时需要停止
  2. 需要生成到目的地的路径
  3. 在下面的伪代码中,路径变量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