algorithm - 如何遍历图中的一个循环?

标签 algorithm graph-theory graph-algorithm depth-first-search breadth-first-search

我正在尝试在 MST 的 CLRS 中使用 ch23,这是一个问题:

Given a graph G and a minimum spanning tree T , suppose that we decrease the weight of one of the edges not in T . Give an algorithm for finding the minimum spanning tree in the modified graph.

我找到的一个解决方案是在 T 中添加这个新的更改边,然后在 T 中创建一个简单的循环,遍历这个循环并删除这个循环中的最大权重边,,新更新的 MST 已找到!

我的问题是,如何遍历这个简单循环上的节点?因为如果我从 T 中新添加的边的一个端点开始 T 中的遍历,那么 DFS/BFS 遍历可能会超出循环。

我能想到的一个解决方案是在添加新边后在T 中找到双连通组件。只有一个 BCC 会被发现,这是这个新形成的简单循环,然后我可以在我的 DFS 代码中加入一个特殊条件,说只遍历这个 BCC 中的边/节点,并且一次返回-找到边,停止遍历。

编辑:顺便说一句,图 G 是连通且无向的

最佳答案

你的解决方案基本上是好的。为了使其更正式,您可以使用 Tarjan's bridge-finding algorithm

该算法在线性时间内找到图中的切边(也称为桥)。将 E' 视为切边集。很容易证明E'中的每条边都在圆上。所以,E/E' 一定是图中的循环。

您可以使用 HashMap 或数组构建函数来找出您的Ecut-edges 集之间的差异

从这里您可以运行简单的 for 循环来找到您要删除的最大权重边。

希望对您有所帮助!

关于algorithm - 如何遍历图中的一个循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52904065/

相关文章:

algorithm - 在矩阵中的源和目标之间建立路径所需的最少翻转

algorithm - 有向图广度优先搜索期间的边分类

algorithm - 找到完成可以按任何顺序完成的操作的最短时间

algorithm - 方案中的最佳优先搜索算法

algorithm - 短语模板检测

time-complexity - O(V+E) 等价于 O(V^2) 吗?

c++ - 如何更改 C++ 标准库中堆中的最大元素?

python - 从 pandas 数据帧生成边缘列表

python - 将 4 色定理应用于图形数组中存储的相邻多边形列表

java - 给定一个大树结构,是否有一种有效的算法来对树进行查询或过滤?