是否有一种算法可以确保图中的每个节点都有通往该图中任何其他节点的路径?

时间:2019-12-08 07:51:07

标签: algorithm graph graph-theory

我正在编写代码以确保已连接图形,这意味着您可以从图形中的任何其他节点到达任何节点。但是我的代码需要很长时间才能运行。实现此目的最快的算法是什么?

2 个答案:

答案 0 :(得分:3)

如果它是无向图,则:

  1. 选择任何节点并进行遍历(深度优先或宽度优先并不重要),将访问的每个节点放入字典或地图中。
  2. 比较该字典的节点列表。这两个结构应包含相同的节点。

答案 1 :(得分:1)

这取决于图形的大小。

正如@Mehdi在评论中指出的,您绝对应该看一下“严格连接的组件”概念,该概念表示两个节点ab在且仅当存在于至少从ab的路径,还有从ba的路径。

这种方法在具有较大图形(例如1M节点)的情况下效果很好。

SCC in D-Graph

有许多代码可以计算图的强连接部分。我遇到了完全相同的问题,并找到了具有该概念的解决方案(链接到github issue

您应该做的是在图中找到强连接的组件(SCC),然后,如果其中只有一个,则所有节点都已连接;如果有多个,则有一些节点处于连接状态。单向连接(例如,您不能以任何方式离开它们的组件)