알고리즘||코딩테스트/백준

[백준 24444번] 알고리즘 수업 - 너비 우선 탐색 1

째로스 2023. 6. 26. 17:58

https://www.acmicpc.net/problem/24444

 

24444번: 알고리즘 수업 - 너비 우선 탐색 1

첫째 줄에 정점의 수 N (5 ≤ N ≤ 100,000), 간선의 수 M (1 ≤ M ≤ 200,000), 시작 정점 R (1 ≤ R ≤ N)이 주어진다. 다음 M개 줄에 간선 정보 u v가 주어지며 정점 u와 정점 v의 가중치 1인 양방

www.acmicpc.net

 

import sys
from collections import deque

n,m,r=map(int,sys.stdin.readline().split())
graph=[[] for _ in range(n+1)]
visited=[0 for _ in range(n+1)]

def bfs(start):
    cnt=1
    visited[start]=cnt
    que=deque([start])
    while que:
        now=que.popleft()
        for i in graph[now]:
            if visited[i]==0:
                cnt+=1
                visited[i]=cnt
                que.append(i)

for i in range(m):
    a,b=map(int,sys.stdin.readline().split())
    graph[a].append(b)
    graph[b].append(a)

for i in range(1,n+1):
    graph[i].sort()

bfs(r)

for i in range(1,n+1):
    print(visited[i])

전형적인 BFS를 사용하여 풀수 있는 문제였다.