Java 最小化图中桥的数目

Java 最小化图中桥的数目,java,c++,algorithm,graph,bridge,Java,C++,Algorithm,Graph,Bridge,我试图解决一个问题,这个问题基本上归结为: 给出一组编号为1到N的N节点和M边,其中N我认为这个问题很难解决。以下是我能想到的解决方案的概要: 1) 在图中找到所有的桥 2) 现在,假设桥梁是图形中唯一需要的边。您只保留网桥并将网桥之间的所有节点连接到大节点中 3) 你现在有一棵树了。边是桥,节点是“大节点”,它们组合了上一个图中的节点 4) 我们把这个叫做森林图T 5) 连接图T中的任意两个节点,创建一个循环。循环中的任何边都不是桥 6) 第5点意味着通过创建尽可能长的周期来找到解决方案。您可

我试图解决一个问题,这个问题基本上归结为:

给出一组编号为1到N的N节点和M边,其中N我认为这个问题很难解决。以下是我能想到的解决方案的概要:

1) 在图中找到所有的桥

2) 现在,假设桥梁是图形中唯一需要的边。您只保留网桥并将网桥之间的所有节点连接到大节点中

3) 你现在有一棵树了。边是桥,节点是“大节点”,它们组合了上一个图中的节点

4) 我们把这个叫做森林图T

5) 连接图T中的任意两个节点,创建一个循环。循环中的任何边都不是桥

6) 第5点意味着通过创建尽可能长的周期来找到解决方案。您可以通过查找两个节点之间距离最长的节点来实现这一点

7) 您可以在图形中找到距离最长的节点。如何在这里进行讨论:


如果有任何一点需要进一步解释,请告诉我。

我已经得出了一个类似的算法,但我无法正确地编写代码。如果您能用一些代码进行解释,这将非常有帮助。不过,这个解释真是太棒了!对我来说,核心思想看起来不错,但请注意,初始图形没有必要连接。这意味着在第3点,你可能会得到一个森林而不是一棵树。@animeshfattehpuria诚实地说,为这个问题编写代码是残忍的。您可以通过删除所有网桥来执行第3点,并且每个连接的组件表示一个节点。您可以使用泛洪填充算法来获取这些组件。而不是从中构建图表。为了解决第六点,我会尝试探索这个链接。回答得好!对于步骤1,我建议对一个有效算法进行以下解释:可以使用链分解高效地找到桥。看见