当前位置: 首页 > 知识库问答 >
问题:

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

栾耀
2023-03-14

我正在MST上的CLRS中尝试ch23,这里有一个问题:

给定一个图G和一个最小生成树T,假设我们减少不在T中的一条边的权重。给出了在修改图中求最小生成树的算法。

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

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

我能想到的一个解决方案是在添加新边后,在T中找到biconnected组件。只会找到一个BCC,这是新形成的简单循环,然后我可以在DFS代码中加入一个特殊条件,即只遍历此BCC中的边/节点,一旦找到后边,停止遍历。

编辑:图形G是连接的,并且是无向的


共有1个答案

秦渝
2023-03-14

你的解决方案基本上是好的。为了使它更正式,您可以使用Tarjan的桥梁查找算法

该算法在线性时间内找到图中的切边(又名桥梁)。将E'视为切边集。很容易证明E'中的每条边都不能在圆上。所以,E/E'必须是图中的循环。

您可以使用哈希映射或数组构建函数来查找E切割边集之间的差异

从这里,您可以运行simple for loop来查找要删除的最大权重边。

希望有帮助!

 类似资料:
  • 问题内容: 我要尝试运行三个数组,我想在一个函数中使用所有三个数组的值。这听起来可能令人困惑,但这是我所拥有的: 这会运行,但是我得到的是:(makeUser打印出3个值) 等等。 我想要的就是 这可能吗?任何帮助表示赞赏。 谢谢! 问题答案: 如果您始终确定数组的长度相等,那么最好循环遍历其中一个数组,并使用其索引来引用其他数组: 但是,我建议将这些数据放入字典中,但我认为这只是示例数据,用于说

  • 对于这个问题,我需要用一个公式求出两个点之间的距离,给定两个点的坐标和值p。我让程序为一个输入行工作,但我希望用户能够输入多行,并让程序循环通过它们。例如: 1.0 1.0 2.0 2.0 1.0 我对java相当陌生,还在学习,所以我很感激我能得到的任何帮助。提前谢了。

  • 我的Flutter项目中有一个Dart枚举,如下所示: 如果我有一些随机枚举状态,如,我如何迭代到下一个枚举(而不需要做一些事情,如用开关语句映射它们)? 我在这个,这个和这个的帮助下找到了答案,所以我把它贴在下面。

  • 问题内容: 我想知道是否有这样一种方法来遍历java中每个循环的扩展扩展的多个集合。 所以像这样: 谢谢 问题答案: 您可以使用Guava的:

  • 问题内容: 我需要遍历一个post数组并对其求和。 但是我不知道从哪里开始。 问题答案: 这是您的操作方式: 这会照顾传入的变量和数组。

  • 本文向大家介绍JavaScript中的图遍历,包括了JavaScript中的图遍历的使用技巧和注意事项,需要的朋友参考一下 图遍历(也称为图搜索)是指访问(检查和/或更新)图中每个顶点的过程。此类遍历按访问顶点的顺序分类。