实现深度优先图遍历

时间:2011-04-23 01:43:54

标签: 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(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;
}

1 个答案:

答案 0 :(得分:2)

这两个片段的关键是以下想法:

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的子节点应用完全相同的函数,依此类推。这就是为什么它被称为深度优先搜索,因为您的搜索将首先搜索路径中尽可能最低的子集,然后再回来检查剩余的子节点。