如何在有向图上实现深度优先搜索以访问所有顶点

时间:2019-05-16 07:40:50

标签: java algorithm graph depth-first-search graph-traversal

我们如何使用邻接矩阵在有向图上进行深度优先搜索,在邻接矩阵中从随机顶点开始探索所有顶点?我尝试实现dfs,但它仅探索从起始顶点可到达的顶点。

"hostPort": 8080

} }

2 个答案:

答案 0 :(得分:1)

  1. 在有向图中,可能没有节点可以到达所有其他节点。那么在这种情况下您期望什么?

  2. 如果至少有一个节点可以到达所有其他节点,那么您现在只知道它是哪个节点,就可以选择一个随机节点,逆着输入边的方向寻找根您可以从中到达所有其他节点的节点。

答案 1 :(得分:0)

您的代码有两个问题,其中一个是您使用相同的顶点执行int vertex = s.pop();,然后执行s.push(vertex);。后者可能应该是s.push(i);

实现DF遍历的最简单方法是仅使用递归。然后代码衰减到

function dfs(v) {
  if v not visited before {
    mark v as visited;
    for every adjacent vertex a of v do {
      dfs(a);
    }
    do something with v; // this is *after* all descendants have been visited.
  }
}

当然,每个递归实现都可以使用堆栈和迭代来等效地实现,但是在您的情况下,这会更加复杂,因为您不仅需要将当前顶点存储在堆栈上,而且还需要将状态存储在堆栈上子代的迭代次数(在您的情况下为循环变量i)。