Java 实现深度优先图遍历
关于深度优先遍历,我有一些相互矛盾的信息,需要一些帮助来理解如何构建程序。给定一个特定的图,我想打印一系列顶点。用户将输入一个特定节点以开始遍历。我在看不同的例子,我不明白深度优先遍历的顺序是如何工作的。我需要使用以下伪代码:Java 实现深度优先图遍历,java,traversal,depth-first-search,Java,Traversal,Depth First Search,关于深度优先遍历,我有一些相互矛盾的信息,需要一些帮助来理解如何构建程序。给定一个特定的图,我想打印一系列顶点。用户将输入一个特定节点以开始遍历。我在看不同的例子,我不明白深度优先遍历的顺序是如何工作的。我需要使用以下伪代码: public DFS() { DFS(v) { num(v) = i ++; for all vertices u adjacent to v { if num(u) is 0 attach edge
public DFS() {
DFS(v)
{ num(v) = i ++;
for all vertices u adjacent to v
{ if num(u) is 0
attach edge(uv) to edges;
DFS(u);
}
}
depthFirstSearch()
{ for all vertices v
num(v) = 0;
edges = null; //vector of all edges
i=1;
while there is a vertex v such that num(v) is 0
DFS(v);
output edges;
}
这两个片段的关键在于以下理念:
check if item found at (v)
if item not found,
for all vertices u adjacent to v
depth_first_search(u)
您不需要立即在所有节点的(v)子节点(u的列表)上检查结束条件,而只在当前节点v上检查结束条件。如果不满足结束条件,则应用相同的深度优先搜索函数,从v,u1的第一个子项开始。由于u1也可能有子级,因此在处理v的其余子级之前,将对u1的子级应用完全相同的函数,依此类推。这就是为什么称之为深度优先搜索,因为您的搜索将首先搜索路径中尽可能低的子项集,然后再回来检查剩余的子项。+1用于添加作业标记!