https://www.acmicpc.net/problem/11725
부모를 찾는 가장 간단한 그래프 탐색 문제입니다.
BFS와 DFS를 사용해 풀 수 있는데, 저는 BFS를 사용해 문제를 풀었습니다.
graph = new ArrayList<>();
for (int i = 0; i <= n; i++) graph.add(new ArrayList<>());
for (int i = 1; i < n; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
graph.get(a).add(b);
graph.get(b).add(a);
}
private static void bfs() {
Queue<Integer> queue = new ArrayDeque<>();
queue.add(1); // 루트를 1번이라 가정하고 탐색
while (!queue.isEmpty()) {
int cur = queue.poll();
for (int nxt : graph.get(cur)) { // 인접한 노드 탐색
if (visited[nxt] != 0) continue; // 이미 부모를 찾았다면 탐색을 진행하지 않음
queue.add(nxt); // 다음 노드 탐색을 위해 큐에 추가
visited[nxt] = cur; // 부모 처리
}
}
}
import java.util.*;
import java.io.*;
public class Main {
static int n;
static int[] visited;
static List<ArrayList<Integer>> graph;
static StringBuilder sb = new StringBuilder();
private static void bfs() {
Queue<Integer> queue = new ArrayDeque<>();
queue.add(1);
while (!queue.isEmpty()) {
int cur = queue.poll();
for (int nxt : graph.get(cur)) {
if (visited[nxt] != 0) continue;
queue.add(nxt);
visited[nxt] = cur;
}
}
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
n = Integer.parseInt(br.readLine());
graph = new ArrayList<>();
for (int i = 0; i <= n; i++) graph.add(new ArrayList<>());
for (int i = 1; i < n; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
graph.get(a).add(b);
graph.get(b).add(a);
}
visited = new int[n+1];
bfs();
for (int i = 2; i <= n; i++) {
sb.append(visited[i]).append('\n');
}
System.out.println(sb.toString());
}
}