Algorithm 深度优先搜索递归算法
我正在查看DFS伪代码 为什么作者在访问了顶点的所有邻居后将顶点标记为未访问?这是必要的步骤吗。既然我们只是在搜索一个顶点,它是否应该在不将顶点标记为未访问的情况下工作Algorithm 深度优先搜索递归算法,algorithm,recursion,depth-first-search,Algorithm,Recursion,Depth First Search,我正在查看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;
}