문제풀이/백준(Boj) 문제풀이

[백준][수학] - 24480. 알고리즘 수업 - 깊이 우선 탐색 2

얄루몬 2022. 5. 19. 16:52

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

def DFS(r):
    visited[r] = True
    global cnt
    path[r] = cnt
    cnt += 1
    for i in graph[r]:
        if not visited[i]:
            DFS(i)


if __name__ == '__main__':
    n, m, r = map(int,input().split())
    graph =[[] for _ in range(n+1)]
    visited = [False] * (n+1)
    cnt = 1
    path = [0] * (n+1)
    for _ in range(m):
        u,v = map(int,input().split())
        graph[u].append(v)
        graph[v].append(u)
    for i in range(1, n+1):
        graph[i].sort(reverse=True)
    DFS(r)

    for i in range(1, n+1):
        print(path[i])
  • 내림차순으로 방문한다는 조건이 있기 때문에 그래프를 입력 받은 뒤 노드마다 들어 있는 인접 노드를 내림차순(큰 수에서 작은수로)으로 정렬해준다.
  • 결과를 출력한 리스트 path를 0으로 초기화해주고 방문 순서에 글로벌 변수 cnt를 사용해 순서를 중첩시켜 준다(DFS 내에 cnt를 사용할 경우 중첩 X 매번 DFS() 될때마다 1로 초기화 됨)
  • 결과값을 저장한 path리스트를 돌며 저장해둔 횟수를 출력해주면 된다.