algorithm - 使用 DFS 创建生成树

标签 algorithm depth-first-search spanning-tree

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

最佳答案

既然您在评论中提到给定生成树,您需要一些输出同一棵树的 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)

顺便说一句,我不认为你需要做一个访问计数,因为你有一个生成树,所以 edge_exisits 会为你做大致相同的事情

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

关于algorithm - 使用 DFS 创建生成树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17601781/

相关文章:

algorithm - 只有叶子的最小生成树?

algorithm - 最小乘积生成树与最小和生成树不同吗?

algorithm - 通知好友注册

c++ - 使用递归迷宫最短路径

algorithm - 寻找二叉树中的最长路径

Java检测循环有向图

C:如何为生成树释放内存?

JavaScript - 有没有办法在不循环的情况下找出给定字符是否包含在字符串中?

java - 在Java中使用BFS的两个城市之间的路径

algorithm - 计算插入排序的运行时间