[Algorithm]無方向図周期の決定(相互集合)
6307 ワード
グラフィックでループを判別する
ノンダイレクトマップにおけるループ判別:シーケンスセット(disjoint set)
方向図でのループの決定:DFS
本稿では,無方向図におけるcycle判別について論じる.
無方向図におけるサイクル判別
集合演算は図中のedgeとして表すことができる
したがって、ループを識別するには、2つのノードを含むセットを次々とチェックします.
無方向図中の循環判別アルゴリズム:
集合演算は図中のedgeとして表すことができる
したがって、ループを識別するには、2つのノードを含むセットを次々とチェックします.
無方向図中の循環判別アルゴリズム:
ソースコードの例
# 이코테 p.279 서로소 집합을 활용한 사이클 판별 소스코드
def find_parent(parent, x):
if parent[x] != x:
parent[x] = find_parent(parent, parent[x])
return parent[x]
def union_parent(parent, a, b):
a = find_parent(parent, a)
b = find_parent(parent, b)
if a < b:
parent[b] = a
else:
parent[a] = b
v, e = map(int, input().split())
parent = [0] * (v + 1)
for i in range(1, v + 1):
parent[i] = i
cycle = False
for i in range(e):
a, b = map(int, input().split())
if find_parent(parent, a) == find_parent(parent, b):
cycle = True
break
else:
union_parent(parent, a, b)
if cycle:
print('Cycle occurrence')
else:
print('No cycle occurred')
Reference
この問題について([Algorithm]無方向図周期の決定(相互集合)), 我々は、より多くの情報をここで見つけました https://velog.io/@jiggyjiggy/Algorithm-무방향-그래프-사이클-판별서로소-집합テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol