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