Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 实现深度优先图遍历_Java_Traversal_Depth First Search - Fatal编程技术网

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