Algorithm 深度优先搜索递归算法

Algorithm 深度优先搜索递归算法,algorithm,recursion,depth-first-search,Algorithm,Recursion,Depth First Search,我正在查看DFS伪代码 为什么作者在访问了顶点的所有邻居后将顶点标记为未访问?这是必要的步骤吗。既然我们只是在搜索一个顶点,它是否应该在不将顶点标记为未访问的情况下工作 另一个链接在将顶点设置为已访问后,实际上不会将其标记为未访问。当您查找指向顶点的路径而不是顶点本身时,应将该顶点标记为未访问 假设您在遍历之后没有将顶点标记为未访问,并且某些搜索遍历了图形的一部分,并且确实找到了指向所讨论顶点的路径。在某个点上,搜索的边缘已用完,无法进行探索,并将其步骤返回到某个较早的点,从那里继续 如果有一个

我正在查看DFS伪代码

为什么作者在访问了顶点的所有邻居后将顶点标记为未访问?这是必要的步骤吗。既然我们只是在搜索一个顶点,它是否应该在不将顶点标记为未访问的情况下工作


另一个链接在将顶点设置为已访问后,实际上不会将其标记为未访问。

当您查找指向顶点的路径而不是顶点本身时,应将该顶点标记为未访问

假设您在遍历之后没有将顶点标记为未访问,并且某些搜索遍历了图形的一部分,并且确实找到了指向所讨论顶点的路径。在某个点上,搜索的边缘已用完,无法进行探索,并将其步骤返回到某个较早的点,从那里继续

如果有一个顶点被搜索的另一条路径,它通过在第一条路径上找到的顶点,该算法就不会找到第二条路径,因为它将把常见的顶点视为已经访问过的。


另一方面,如果只查找一条路径(或仅查找顶点的存在,即根本没有路径),则可以跳过将节点标记为未访问“在您离开时”。

当您查找指向顶点的路径而不是顶点本身时,应将顶点标记为未访问

假设您在遍历之后没有将顶点标记为未访问,并且某些搜索遍历了图形的一部分,并且确实找到了指向所讨论顶点的路径。在某个点上,搜索的边缘已用完,无法进行探索,并将其步骤返回到某个较早的点,从那里继续

如果有一个顶点被搜索的另一条路径,它通过在第一条路径上找到的顶点,该算法就不会找到第二条路径,因为它将把常见的顶点视为已经访问过的。 另一方面,如果您只查找一条路径(或仅查找顶点的存在,即根本没有路径),则可以跳过将节点标记为“在您离开时”未访问

dfs(node start) {
 stack s;
 s.push(start);
 while (s.empty() == false) {
  top = s.top();
  s.pop();
  mark top as visited;

  check for termination condition

  add all of top's unvisited neighbors to the stack.
  mark top as not visited;
 }
}

dfs(node current) {
 mark current as visited;
 visit all of current's unvisited neighbors by calling dfs(neighbor)
 mark current as not visited;
}