티스토리 뷰

반응형

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])
반응형
댓글