PS

[BOJ] Python 백준 알고리즘 수업 - 깊이 우선 탐색 1(24479)

1223v 2024. 10. 31. 19:28

 

 

 

전형적인 dfs 문제

방문을 오름차순으로 방문해야하기에 방문때마다 오름차순으로 정렬해줘야한다.

순차적으로 방문해 순서를 매기기 때문에 cnt를 외부에 두어 방문때마다 값을 증가시켜주며, visited 배열에 갱신해준다.

 

import sys
input = sys.stdin.readline
sys.setrecursionlimit(150000)

N, M, R = map(int,input().split())

visited = [0] * (N+1)
cnt = 1
s = [[] for _ in range(N+1)]
for _ in range(M):
    x,y = map(int,input().split())
    s[x].append(y)
    s[y].append(x)
def dfs(v):
    global cnt
    visited[v] = cnt
    s[v].sort()
    for j in s[v]:
        if not visited[j]:
            cnt += 1
            dfs(j)



dfs(R)

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

 

회고. 

계속 sys.setrecursionlimit(10**5)로 맞춰줬는데 부족하다고 나왔다,

 

 

확인해보니

첫째 줄에 정점의 수 N (5 ≤ N ≤ 100,000), 간선의 수 M (1 ≤ M ≤ 200,000), 시작 정점 R (1 ≤ R ≤ N)이 주어진다.

 

라고 한다...

 

조건을 잘 파악해 재귀 깊이를 설정해줘야함

너무 많으면, overflow나고 너무 적으면 recursion 에러 남,,