使用DFS创建生成树

时间:2013-07-11 19:28:45

标签: algorithm depth-first-search spanning-tree

在已连接和未定向的给定图G = (V,E)上运行深度优先搜索(DFS)算法,可提供生成树。在图上运行DFS时,当我们到达一个度数大于1的顶点时,即 - 有多个边连接到它,我们随机选择一个边继续。我想知道选择边缘(或顶点)继续的选项是否允许使用DFS创建给定图形的每个生成树

2 个答案:

答案 0 :(得分:2)

由于您在给出生成树的注释中提到了一些输出相同树的DFS,因此这应该不是问题。

假设您有一个所需的生成树和一个邻接列表形式的图形,并且有一个方法edge_exists(u,v),它返回true或false,具体取决于给定生成树中是否存在边缘。

explore(node):
   visited[node] = 1;
   for v in node.neighbors:
       if edge_exists(node, v) && !visited[v]:
           v.p = node
           explore(v)

BTW我认为你不需要进行访问计数,因为你有一个生成树,所以edge_exisits对你来说大致相同

通过以编程方式输出生成树,我的意思是,给定图形输出所有生成树。我不知道该怎么做。

答案 1 :(得分:0)

您的问题是"我可以使用DFS在图表中找到所有生成树吗?"

那么答案就不是我的朋友。 在任何时间点DFS算法的状态就像火车一样,教练一个接一个地链接。你穿越链条。 要查找生成树,您必须前往深度,D

D = N,图中的顶点数。

要达到上述条件符合的状态,您必须遍历这样的情况 v1-> v2-> v3-> v4 ..... vn-1 - > VN
数字代表遍历历史和
vi!= vj其中i,j∈{1 ... n}。 &安培;我!= j

所以,如果存在这样的生成树 v1-> v3-> v4 ...和v1-> v2以及DFS方法无法产生该结果。

简而言之,你将无法找到任何生成树,其中即使1个顶点是多于1个边的pasrt。

相关问题