11725번: 트리의 부모 찾기 (acmicpc.net)
#루트 없는 트리가 주어진다. 이때, 트리의 루트를 1이라고 정할 때 각 노드의 부모를 구하는 프로그램
from collections import deque
import sys
n = int(sys.stdin.readline()) #노드의 수
graph = [set() for i in range(n+1)]
#인접리스트 구현
for _ in range(n-1): # 정점이 n개이므로 간선은 n-1개 있음
a, b = map(int, sys.stdin.readline().split())
graph[a].add(b)
graph[b].add(a)
visited = [0 for i in range(n+1)]
queue = deque([1])
while queue:
x = queue.popleft()
for node in graph[x]:
if visited[node] == 0:
visited[node] = x # 방문했을 때 0을 대체하게 되는 것은 부모 번호이다.
queue.append(node)
for i in range(2, len(visited)):
print(visited[i])
여러번 런타임 에러가 난 이유: 마지막 출력하는 for문에서 range를 1부터로 설정해놓아서이다.
1은 루트노드인데, 루트노드의 부모 노드는 출력할 필요가 없다..
그리고 인접리스트 구현할 때도 처음에 for _ in range(n)이렇게 했었는데, n은 정점의 개수이므로 간선은 n-1개가 된다.
'알고리즘 PS > Graph' 카테고리의 다른 글
프로그래머스 - 순위 (플로이드 워셜 이용) (1) | 2024.06.14 |
---|---|
그래프 - 가장 먼 노드, 1791. Find Center of Star Graph (0) | 2024.06.12 |
백준 #2606번 바이러스 [파이썬] (0) | 2024.02.03 |
백준 #2178번 미로 탐색 (0) | 2024.02.02 |