첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다.
다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다.
1 2 3 4 5 6
N, M, V = map(int, input().split()) visited = [Falsefor _ inrange(N+1)] graph = [[0]*(N+1) for _ inrange(N+1)] # for 문이 아니라 *로 초기화 for _ inrange(M): s, e = map(int, input().split()) graph[s][e] = graph[e][s] = 1# 한 줄로 동일값 넣기
DFS
들어오는 대로 바로바로 처리 (먼저 깊게 들어가고 다시 올라와 옆으로)
LIFO = 스택
1 2 3 4 5 6 7 8 9 10
# 밑으로 방문 후 pop defdfs(V): # end 조건이 없어도 되는 이유 # for 1~N 까지 돌면서, 남은 요소 중 조건을 만족하는 게 없으면 끝남
visited[V] = True print(V, end=" ") for i inrange(1, N+1): if graph[V][i] == 1andnot visited[i]: dfs(i)