반응형
bfs 라는 것을 이해하는데 오래 걸린 문제
문제
루트 없는 트리가 주어진다. 이때, 트리의 루트를 1이라고 정했을 때, 각 노드의 부모를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 노드의 개수 N (2 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N-1개의 줄에 트리 상에서 연결된 두 정점이 주어진다.
출력
첫째 줄부터 N-1개의 줄에 각 노드의 부모 노드 번호를 2번 노드부터 순서대로 출력한다.
구현
# 백준 11725번 트리 부모 찾기
import collections
N = int(input())
tree=collections.defaultdict(list)
for _ in range(N-1):
a,b = map(int, input().split())
tree[a].append(b)
tree[b].append(a)
def bfs(tree, start):
will_visit=collections.deque([start])
visited=[]
mom=collections.defaultdict(int)
while will_visit:
travel = will_visit.popleft()# 1
if travel in visited:
continue
else:
visited.append(travel)
getter= tree[travel]
while getter:
son = getter.pop()
if mom[son]==0:
mom[son]=travel
will_visit.append(son)
else:
pass
return mom
mom = bfs(tree, 1)
for i in range(2, N+1):
print(mom[i])
반응형
'알고리즘' 카테고리의 다른 글
백준 2252번 줄 세우기 골드2 파이썬 위상정렬기본( 2021.03.02 다시품) (0) | 2021.01.25 |
---|---|
백준 1991번 트리 순회 파이썬 실버1 트리 재귀 (0) | 2021.01.21 |
백준 1010번 다리 놓기 파이썬 실버5 정수론 및 조합론 (0) | 2021.01.20 |
백준 20149번 선분 교차 3 파이썬 플레5 기하 (0) | 2021.01.19 |
백준 17386번 선분 교차1 파이썬 골드3 (0) | 2021.01.18 |