열렬히.뛰기

24479번: 알고리즘 수업 - 깊이 우선 탐색 1 (1)

알고리즘: 실전 > 백준 단계별로 풀기: 10번 ~ 25번 > 24479번: 알고리즘 수업 - 깊이 우선 탐색 1 (1)

정답

python
# 더 빠른 input을 위한 설정
# 무한 재귀를 막기 위해 넣는다.
import sys
sys.setrecursionlimit(100000) 
input = sys.stdin.readline

# 입력
n, m, r = map(int, input().split())
graph = [[] for _ in range(n+1)]
for _ in range(m):
    u, v = map(int, input().split())
    graph[u].append(v)
    graph[v].append(u)
for i in graph:
    i.sort()

# 
visited = [False] * (n+1)
order = [0] * (n+1)
cnt = 1

# dfs 설정
def dfs(graph, v, visited):
    global cnt 
    visited[v] = True
    order[v] = cnt
    cnt += 1
    for i in graph[v]:
        if not visited[i]:
            dfs(graph, i, visited)


#
dfs(graph, r, visited)
for i in range(1, len(order)):
    print(order[i])

설명

  • 숫자를 넣어주는 visited 리스트와 방문 순서를 넣어주는 order 리스트를

    따로 설정해야 한다. 안 그러면 같은 자리에 계속 더해지는 오류 발생.

  • 몇 번째로 출력되는지에 주목해야 한다.