[Algorithm][Python] 백준(BOJ) 24444 알고리즘 수업 - 너비 우선 탐색1

최대 1 분 소요

[문제]

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

image image


풀이

[내 코드(실패)]

import sys
from collections import deque

def bfs(graph,v):
    queue = deque()
    
    visited[v] = 1
    queue.append(v)
    
    while queue:
        v = queue.popleft()
        print(v)
        
        for vertex in graph[v]:
            if visited[vertex] == 0:
                queue.append(vertex)
                visited[vertex] = 1

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

for _ in range(m):
    u, v = map(int, sys.stdin.readline().split())
    graph[u].append(v)
    graph[v].append(u)

for i in range(len(graph)):
    graph[i].sort()

bfs(graph, r)

for i in range(1, len(visited)):
    if visited[i] == 0:
        print(0)

문제를 잘못 읽고 방문한 순서대로 출력하라는 줄 알고 popleft한 v 를 바로 출력했다…
문제를 똑바로 읽자…!!

[내 풀이(정답)]

import sys
from collections import deque

def bfs(graph,v):
    queue = deque()
    order = 1

    visited[v] = order
    queue.append(v)
    
    while queue:
        v = queue.popleft()
        
        for vertex in graph[v]:
            if visited[vertex] == 0:
                order += 1
                queue.append(vertex)
                visited[vertex] = order

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

for _ in range(m):
    u, v = map(int, sys.stdin.readline().split())
    graph[u].append(v)
    graph[v].append(u)

for i in range(len(graph)):
    graph[i].sort()

bfs(graph, r)

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

image

댓글남기기