Koala - 11기/코딩테스트 준비 스터디
[Python/백준] 24445 알고리즘 수업 - 너비 우선 탐색 2
긍살:D
2023. 8. 21. 06:24
문제링크
https://www.acmicpc.net/problem/24445
24445번: 알고리즘 수업 - 너비 우선 탐색 2
첫째 줄에 정점의 수 N (5 ≤ N ≤ 100,000), 간선의 수 M (1 ≤ M ≤ 200,000), 시작 정점 R (1 ≤ R ≤ N)이 주어진다. 다음 M개 줄에 간선 정보 u v가 주어지며 정점 u와 정점 v의 가중치 1인 양
www.acmicpc.net
코드
from collections import deque
input = __import__('sys').stdin.readline
n,m,r = map(int,input().split())
graph = [[] for _ in range(n+1)]
for _ in range(m):
a,b = map(int,input().split())
graph[a].append(b)
graph[b].append(a)
visited = [False for _ in range(n+1)]
result = [0 for _ in range(n)]
def bfs(start):
global result
num = 1
visited[start] = True
q = deque([start])
while q:
node = q.popleft()
result[node-1] = num
num+=1
for i in sorted(graph[node], reverse=True):
if not visited[i]:
visited[i] = True
q.append(i)
bfs(r)
print(*result, sep='\n')
문제풀이
기본적인 bfs 문제이다. 주의할 점은 인접 정점은 내림차순으로 방문해야 한다.
sorted(graph[node], reverse=True), 인접한 정점들을 내림차순으로 정렬하여 방문한다.