요깨비's LAB

[백준, DFS, JAVA] P11725. 트리의 부모 찾기 본문

알고리즘(Java)/BFS&DFS

[백준, DFS, JAVA] P11725. 트리의 부모 찾기

요깨비 2020. 10. 7. 18:54

노드 객체를 만들고 적절히 DFS 탐색하면서 부모노드를 갱신해주면 됩니다. 여기에서 이미 갱신된 부모노드는 갱신하지 않도록 예외를 걸어주었습니다.

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Scanner;

public class Main {
	static int N;
	static Element[] elements;
	static boolean[] visited;

	public static void main(String[] args) {
		Scanner scr = new Scanner(System.in);

		N = scr.nextInt();
		elements = new Element[N + 1];
		visited = new boolean[N + 1];

		for (int i = 1; i <= N; i++) {
			elements[i] = new Element(i);
		}

		for (int i = 1; i <= N-1; i++) {
			int num1 = scr.nextInt();
			int num2 = scr.nextInt();

			elements[num1].linkedElements.add(elements[num2]);
			elements[num2].linkedElements.add(elements[num1]);
		}

//		for (int i = 1; i <= N; i++) {
//			dfs(i, i);
//		}
		
		elements[1].parent = 1;
		dfs(1);
		
		for(int i=2;i<=N;i++) {
			System.out.println(elements[i].parent);
		}
	}

	public static void dfs(int start) {
//		System.out.println(start + "시작!");
		if (elements[start].isVisited) {
//			System.out.println(start + " 방문함");
			return;
		}
		
		elements[start].isVisited = true;
		
		Iterator<Element> itr = elements[start].linkedElements.iterator();
		
		while(itr.hasNext()) {
			Element element = itr.next();
			if(element.parent == -1)
				element.parent = start;
			
			dfs(element.id);
		}
	}
}

class Element {
	int id;
	int parent = -1;
	List<Element> linkedElements = new ArrayList<>();
	boolean isVisited = false;

	public Element(int id) {
		this.id = id;
	}
}
Comments