📖Problem

🔍Intuition

DFS 의 의사코드를 토대로 구현할 수 있다.

dfs(V, E, R) {  # V : 정점 집합, E : 간선 집합, R : 시작 정점
    visited[R] <- YES;  # 시작 정점 R을 방문 했다고 표시한다.
    for each x ∈ E(R)  # E(R) : 정점 R의 인접 정점 집합.(정점 번호를 오름차순으로 방문한다)
        if (visited[x] = NO) then dfs(V, E, x);
}

🔍Approach

🚩My submission

1차 시도: 런타임에러 (RecursionError)

import sys
input = sys.stdin.readline

def dfs(v, i):
    print(v)
    if visited[i] == 0:
        visited[i] = 1
        for u in sorted(graph[v]):
            if visited[u] == 0:
                dfs(u, i+1)

# n: 정점의 수, m: 간선의 수, r: 시작 정점
n, m, r = map(int, input().strip().split())
graph = {}
visited = [0] * (n+1)
for i in range(m):
    u, v = map(int, input().strip().split())
    if u in graph:
        graph[u].append(v)
    else:
        graph[u] = [v]
    if v in graph:
        graph[v].append(u)
    else:
        graph[v] = [u]

dfs(r, 1)
print(0)

2차 시도: 최대 재귀한도 깊이 추가

RecursionError가 나서 아래 블로그를 참고하니까

https://velog.io/@csexpert/python-최대-재귀한도-깊이-에러RecursionError-maximum-recursion-depth-exceeded-in-comparison

import sys
sys.setrecursionlimit(10**7)

import sys
sys.setrecursionlimit(10**7)

input = sys.stdin.readline

def dfs(v, i):
    print(v)
    if visited[i] == 0:
        visited[i] = 1
        for u in sorted(graph[v]):
            if visited[u] == 0:
                dfs(u, i+1)

# n: 정점의 수, m: 간선의 수, r: 시작 정점
n, m, r = map(int, input().strip().split())
graph = {}
visited = [0] * (n+1)
for i in range(m):
    u, v = map(int, input().strip().split())
    if u in graph:
        graph[u].append(v)
    else:
        graph[u] = [v]
    if v in graph:
        graph[v].append(u)
    else:
        graph[v] = [u]

dfs(r, 1)
print(0)

하지만 결과는 틀렸습니다 ..