我正在编写代码以确保已连接图形,这意味着您可以从图形中的任何其他节点到达任何节点。但是我的代码需要很长时间才能运行。实现此目的最快的算法是什么?
答案 0 :(得分:3)
如果它是无向图,则:
答案 1 :(得分:1)
这取决于图形的大小。
正如@Mehdi在评论中指出的,您绝对应该看一下“严格连接的组件”概念,该概念表示两个节点a
和b
在且仅当存在于至少从a
到b
的路径,还有从b
到a
的路径。
这种方法在具有较大图形(例如1M节点)的情况下效果很好。
有许多代码可以计算图的强连接部分。我遇到了完全相同的问题,并找到了具有该概念的解决方案(链接到github issue)
您应该做的是在图中找到强连接的组件(SCC),然后,如果其中只有一个,则所有节点都已连接;如果有多个,则有一些节点处于连接状态。单向连接(例如,您不能以任何方式离开它们的组件)