判断图的连通性判断方法比较多,最常见的就是并查集、DFS、BFS 这几种,网上的代码也很多,文章最后也给出了一些参考,这里主要讲一讲并查集。
因为有判断有向图中是否存在欧拉路径的需求,需要先判断有向图的基图是否连通,于是就找了一些算法,有了这篇文章,文章偏向于个人的理解与想法,深入了解可以点解参考。
并查集由一个记录节点的根节点的数组(或者类似容器,字典)和两个函数(find, join)构成。容器(数组)记录了每个点的根节点是哪个,函数 find 用于查找某个节点的根节点,join 函数是合并两个具有相连关系的节点。
先看代码:
pre = {}
def find(x):
r = x
while pre[r] != r:
r = pre[r]
i = x
while i != r: # 路径压缩,平衡树层次的效果
j = pre[i]
pre[i] = j
i = j
return r