我有一个强连接图,我想找到它们之间至少有2条路径的节点对。 你能给我一个算法或者我能用的东西吗?感谢。
答案 0 :(得分:1)
首先想到的是以下列方式使用DFS:
DFS从某个顶点v1开始,逐个“发现”顶点。每个发现的顶点递归地启动它自己的DFS并在其递归返回后被“处理”
假设从v1到v2有两条有向路径。在那种情况下,v2将被“发现”(通过从v1到v2的这两条路径之一)并最终“处理”。但是,v1的递归还没有结束。 DFS流将第二次达到v2(这次使用从v1到v2的第二条路径),但这次,v2已处于“已处理”状态。
因此,每当我们遇到“已处理”的顶点时,它意味着有第二条路径进入它。
此方法适用于各种有向图,它没有利用图强连接的事实,因此可能这个事实可用于更优化的解决方案。
另请注意,对于无向图,情况要宽松得多 - 我们只需要检测图中的所有周期,并且周期中的每对顶点在它们之间都有两条路径。在有向图中,循环是单向的,因此我们不能假设循环成员之间的双重路径。