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), 인접한 정점들을 내림차순으로 정렬하여 방문한다.