【问题标题】:Implementing depth-first graph traversal实现深度优先图遍历
【发布时间】:2011-04-29 11:34:18
【问题描述】:

我有关于深度优先遍历的相互矛盾的信息,并且可以在理解如何构建程序时使用一些帮助。给定一个图,我想打印一个顶点序列。用户将输入一个特定的节点来开始遍历。我正在查看不同的示例,但我不明白深度优先遍历的顺序是如何工作的。我有以下伪代码可以使用:

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 用于添加作业标签!

标签: java traversal depth-first-search


【解决方案1】:

这两个sn-ps的关键在于以下思想:

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 的孩子,依此类推。这就是它被称为深度优先搜索的原因,因为您的搜索将首先搜索路径中可能最低的一组子节点,然后再返回检查剩余的子节点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-10
    • 2019-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-12
    相关资源
    最近更新 更多