BOJ - 24479

주의·2024년 1월 7일
0

boj

목록 보기
48/214

백준 문제 링크
알고리즘 수업 - 깊이 우선 탐색 1

❓접근법

  1. DFS를 사용했다.
  2. 문제의 조건에서 간선은 양방향이고, 정점 번호를 오름차순으로 방문하는 점에 주의하자
  3. k(방문 순서)라는 1부터 시작하는 변수를 만들어서,
    방문할 때마다 해당하는 answer의 인덱스 값에 k를 넣어주고
    k를 1씩 증가시켜줬다.
  4. 자식 노드를 처음 방문하면 다시 dfs함수를 불러왔다.
  5. answer[1:] 리스트를 한 개씩 출력하면 끝!

👌🏻코드

import sys
sys.setrecursionlimit(10 ** 6)

N,M,R = map(int, sys.stdin.readline().split())
graph = [[] for _ in range(N+1)]

for _ in range(M):
    x,y = map(int, sys.stdin.readline().split())
    graph[x].append(y)
    graph[y].append(x)
    

visited = [False] * (N+1)
answer = [0] * (N+1)


for i in range(len(graph)):
    if len(graph) != 0:
        graph[i] = sorted(graph[i]) 
        
k = 1

def dfs(graph, v, visited):
    global k
    
    visited[v] = True
    answer[v] = k
    
    k += 1

    for i in graph[v]:
        if not visited[i]:
            dfs(graph, i, visited)
            
            
dfs(graph, R, visited)

for i in answer[1:]:
    print(i)

처음에 파이썬에서는 코드가 잘 돌아갔는데 제출만하면 런타임 오류가 나와서
알아보니 파이썬은 기본 재귀 깊이 제한이 있으므로 재귀의 최대 깊이를 설정해야 정상적으로 제출을 할 수 있었다.

import sys
sys.setrecursionlimit(10 ** 6)

0개의 댓글