BOJ - 24444

주의·2024년 1월 4일
0

boj

목록 보기
50/214

백준 문제 링크
알고리즘 수업 - 너비 우선 탐색 1

❓접근법

  1. BFS를 사용했다.
  2. '인접 정점은 오름차순으로 방문한다'에 주의하자
  3. 방문 순서를 기록할 딕셔너리 answer를 만들어준다.
  4. bfs 함수에서, 시작하는 정점의 순서는 1로 지정하고 방문 처리한다.
  5. 자식 노드(i)에 처음 방문한다면,
    방문 처리하고, count를 1 증가시킨다음 answer[i]에 넣어준다.
  6. 시작하는 정점 R로 bfs(R)을 실행시킨 후 방문 순서를 출력하면 끝!

👌🏻코드

from collections import deque
import sys
N,M,R = map(int, sys.stdin.readline().split())
lst = [[] for _ in range(N+1)]

visited = [False] * (N+1)

for _ in range(M):
    x,y = map(int, sys.stdin.readline().split())
    lst[x].append(y)
    lst[y].append(x)
    
for i in range(len(lst)):
    if len(lst) != 0:
        lst[i] = sorted(lst[i])

visited = [False] * (N+1)
answer = {i : 0 for i in range(N+1)}

def bfs(x):
    queue = deque()
    queue.append(x)
    
    
    visited[x] = True
    answer[x] = 1
    count = 1
    
    while queue:
        
        v = queue.popleft()
        
        
        for i in lst[v]:
            if not visited[i]:
                visited[i] = True
                queue.append(i)
                count += 1
                answer[i] = count
                
                
bfs(R)

for idx, value in answer.items():
    if idx != 0:
        print(value)

시간초과가 나므로 import sys를 사용했다.

0개의 댓글