并查集判断有向图有环
时间: 2023-12-01 12:43:06 浏览: 188
python判断无向图环是否存在的示例
并查集可以用于判断有向图是否有环,具体实现方法如下:
1. 初始化并查集,每个节点的父节点都是它本身。
2. 对于有向图中的每一条边,分别找到它的起点和终点所在的集合。
3. 如果起点和终点在同一个集合中,说明出现了环,算法结束。
4. 如果起点和终点不在同一个集合中,将它们所在的集合合并。
5. 重复步骤2-4,直到遍历完所有的边或者出现了环。
以下是Python代码实现:
```python
class UnionFind:
def __init__(self, n):
self.parent = list(range(n))
self.rank = [0] * n
def find(self, x):
if self.parent[x] != x:
self.parent[x] = self.find(self.parent[x])
return self.parent[x]
def union(self, x, y):
root_x, root_y = self.find(x), self.find(y)
if root_x == root_y:
return False
if self.rank[root_x] < self.rank[root_y]:
root_x, root_y = root_y, root_x
self.parent[root_y] = root_x
if self.rank[root_x] == self.rank[root_y]:
self.rank[root_x] += 1
return True
def has_cycle(n, edges):
uf = UnionFind(n)
for edge in edges:
if not uf.union(*edge):
return True
return False
```
其中,n表示有向图中节点的个数,edges是一个列表,每个元素是一个长度为2的列表,表示有向图中的一条边。
阅读全文