11725
접근
- 각 노드 간의 Map과 리스트를 이용해 저장하고
- 저장된 Map을 큐를 통해 출력한다.
풀이
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Queue;
import java.util.Set;
public class Main {
static int N;
static Map<Integer, List<Integer>> graph = new HashMap<>();
static Map<Integer, Integer> map = new HashMap<>();
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(reader.readLine());
for(int i = 0; i < N -1 ; i++) {
String[] temp = reader.readLine().split(" ");
int start = Integer.parseInt(temp[0]);
int end = Integer.parseInt(temp[1]);
addEdge(start, end);
}
bfs(1);
for(int i = 2; i <= N; i++ ){
System.out.println(map.get(i));
}
}
static void bfs(int startNode) {
Queue<Integer> queue = new LinkedList<>();
Set<Integer> visited = new HashSet<>();
queue.add(startNode);
visited.add(startNode);
while (!queue.isEmpty()) {
int currentNode = queue.poll();
for (int neighbor : graph.getOrDefault(currentNode, new ArrayList<>())) {
if (!visited.contains(neighbor)) {
queue.add(neighbor);
visited.add(neighbor);
map.put(neighbor, currentNode);
}
}
}
}
static public void addEdge(int node1, int node2) {
graph.computeIfAbsent(node1, k -> new ArrayList<>()).add(node2);
graph.computeIfAbsent(node2, k -> new ArrayList<>()).add(node1);
}
}