반응형
무방향 그래프에서 사이클 찾기
dfs를 수행하면서, 방문한 정점을 기록합니다. 방문한 정점을 또 방문하면 사이클이 존재합니다.
파이썬 코드
# 2) 무향 그래프에서 순환 판별
# 방문한 정점을 기록하면서, 방문한 정점을 또 방문하면 사이클이 존재
V, E = map(int,input().split())
visited = [0] * (V+1) # 방문한 정점 정보를 담을 stack 생성
graph = [[] for i in range(V+1)] # 빈 인접 리스트 그래프 생성
# 그래프 생성
for i in range(E):
a, b = map(int,input().split()) # 간선 정보 받아오기
graph[a].append(b)
graph[b].append(a)
# dfs 탐색 함수 생성
def dfs(i):
visited[i] = 1 # 방문한 정점 정보 갱신
node = graph[i] # 방문할 정점 받아오기
if not node in visited: # 방문하지 않은 정점이면 dfs 진행
dfs(node)
elif node in visited: # 다음에 방문할 정점이 visitied에 존재하면 순환이 존재
return True
return False # 순환이 존재하지 않으면 False
result = False
for i in range(1, V+1): # 모든 정점 호출
if visited[i] == 0: # 방문하지 않은 정점이면, 탐색 진행
if dfs(i):
result = True
print(result) # 순환이 존재하면 True 반환
관련 문제
반응형
'Python > 알고리즘' 카테고리의 다른 글
[알고리즘] 벨만-포드 알고리즘(Bellman-Ford Algorithm) (0) | 2021.04.22 |
---|---|
[알고리즘] 다익스트라 알고리즘(Dijkstra Algorithm) 파이썬 (0) | 2021.04.21 |
[알고리즘] 유향 그래프에서 순환(cyclic) 판별 (0) | 2021.04.20 |
[알고리즘] 이분 그래프(bipartite graph) 판별하기 (0) | 2021.04.19 |
[알고리즘] SCC 찾기 - 코사라주 알고리즘(kosaraju's algorithm) (0) | 2021.04.18 |