반응형
무방향 그래프에서 사이클 찾기
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 반환
관련 문제
10891번: Cactus? Not cactus?
첫 번째 줄에 그래프의 정점의 개수와 간선의 개수를 나타내는 두 정수 N,M (1 ≤ N,M ≤ 100,000) 이 공백으로 구분되어 주어진다. 다음 M개의 줄에는 간선이 연결하고 있는 두 정점을 나타내는 두 정
www.acmicpc.net
7981번: 장비를 정지합니다
졸업논문을 완성하지 못한 형서는 학교에 대한 테러 계획을 세웠다. 고급정보과학 시간에 몰래 형서가 제작한 기계는, 전원을 켠 순간부터 폭주하기 시작해서 온 학교를 쑥대밭으로 만들고 있
www.acmicpc.net
반응형
'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 |