11725번: 트리의 부모 찾기 (acmicpc.net)

 

11725번: 트리의 부모 찾기

루트 없는 트리가 주어진다. 이때, 트리의 루트를 1이라고 정했을 때, 각 노드의 부모를 구하는 프로그램을 작성하시오.

www.acmicpc.net

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;

public class Main {
    static int[] parent;
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        LinkedList<Integer>[] graph = new LinkedList[n + 1];
        boolean[] visited = new boolean[n+1];
        parent = new int[n+1];
        for(int i = 0; i <= n;i++)
            graph[i] = new LinkedList<Integer>();

        for(int i = 0; i < n - 1; i++){
            String[] s = br.readLine().split(" ");
            int v1 = Integer.parseInt(s[0]);
            int v2 = Integer.parseInt(s[1]);
            graph[v1].add(v2);
            graph[v2].add(v1);
        }
        bfs(1, graph, visited);
        for(int i = 2; i <= n; i++)
            System.out.println(parent[i]);

    }
    public static void bfs(int start, LinkedList<Integer>[] graph, boolean[] visited){
        Queue<Integer> queue = new LinkedList<Integer>();
        visited[start] = true;
        queue.add(start);

        while(queue.size() > 0){
            Integer current = queue.poll();

            for(int next : graph[current]){
                if(visited[next] == false){
                    parent[next] = current;
                    visited[next] = true;
                    queue.add(next);
                }
            }
        }
    }
}

+ Recent posts