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);
}
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)
RecursionError가 나서 아래 블로그를 참고하니까
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)
하지만 결과는 틀렸습니다 ..