728x90
http://www.acmicpc.net/problem/11725
# 조건
- 루트 없는 트리가 주어진다.
- 이 때, 트리의 루트를 1이라고 정했을 때, 각 노드의 부모를 구하는 프로그램 작성
- 첫 줄에 노드의 개수 N (2<=N<=100,000)이 주어진다.
- 둘째 줄부터 N-1개의 줄에 트리 상에서 연결된 두 정점이 주어진다.
# 접근 방법
- 트리의 정점을 tree 리스트에 받아준 후 리스트에 추가해준다.
- parent 리스트를 만들어 준 후 dfs 실행
- 루트 노드인 1을 시작정점으로 하여 tree에 기록되어 있는 node 살펴보기
- 방문하지 않았다면 -> node로 들어가기
-
- parent 리스트의 정점 값이 0이 아니라면 -> 방문한 것
import sys
sys.stdin = open('input.txt')
input = sys.stdin.readline
def dfs(start):
parent=[0] * (N+1)
parent[start] = 1
stack = [start]
while stack:
node = stack.pop()
for i in tree[node]:
if not parent[i]:
stack.append(i)
parent[i] = node
print(*parent[2:], sep='\n')
N = int(input())
tree = [[] for _ in range(N+1)]
for i in range(N-1):
a, b = map(int, input().split())
tree[b].append(a)
tree[a].append(b)
dfs(1)
import sys
sys.stdin = open('input.txt')
input = sys.stdin.readline
from collections import deque
def bfs(start):
parent=[0] * (N+1)
parent[start] = 1
q = deque()
q.append(start)
while q:
node = q.popleft()
for i in tree[node]:
if not parent[i]:
q.append(i)
parent[i] = node
print(*parent[2:], sep='\n')
N = int(input())
tree = [[] for _ in range(N+1)]
for i in range(N-1):
a, b = map(int, input().split())
tree[b].append(a)
tree[a].append(b)
bfs(1)
728x90
'ALGORITHM > DFS, BFS, 그래프 탐색' 카테고리의 다른 글
[백준 12851번] 파이썬 - 숨바꼭질2 (0) | 2022.12.24 |
---|---|
[백준 16953번] A -> B (0) | 2022.12.22 |
[백준 13549번] 파이썬 - 숨바꼭질 3 (0) | 2022.12.09 |
[백준 1967번] 파이썬 - 트리의 지름 (1) | 2022.12.08 |
[백준 1167번] 파이썬 - 트리의 지름 (0) | 2022.12.06 |