[백준 24481] 알고리즘 수업 - 깊이 우선 탐색 3

Junyoung Park·2022년 3월 2일
0

코딩테스트

목록 보기
152/631
post-thumbnail

1. 문제 설명

알고리즘 수업 - 깊이 우선 탐색 3

2. 문제 분석

스택을 통해 DFS를 구현하며, 루트 노드를 0으로 시작해 다음 방문할 노드에 깊이+1을 통해 카운트해준다. 처음 방문한 노드의 깊이만 체크할 수 있다는 점을 유의하자.

3. 나의 풀이

import sys
from collections import deque

n, m, r = map(int, sys.stdin.readline().rstrip().split())

nodes = [[] for _ in range(n+1)]
visited = [False for _ in range(n+1)]
nodes_depth = [0 for _ in range(n+1)]

for _ in range(m):
    tail, head = map(int, sys.stdin.readline().rstrip().split())
    nodes[tail].append(head)
    nodes[head].append(tail)

for i in range(n+1):
    nodes[i].sort(reverse=True)
stack = deque()
stack.append([r, 0])
while stack:
    cur_node, depth = stack.pop()
    if visited[cur_node]: continue
    visited[cur_node] = True
    nodes_depth[cur_node] = depth

    for next_node in nodes[cur_node]:
        if not visited[next_node]:
            stack.append([next_node, depth+1])

for i in range(1, n+1):
    if i == r: print(0)
    elif nodes_depth[i] == 0: print(-1)
    else: print(nodes_depth[i])
profile
JUST DO IT

0개의 댓글