[BaekJoon] 1260 DFS์™€ BFS (java)

SeongWon Ohยท2021๋…„ 10์›” 8์ผ
0
post-thumbnail

๐Ÿ”— ๋ฌธ์ œ ๋งํฌ

https://www.acmicpc.net/problem/1260


๐Ÿ‘จ๐Ÿปโ€๐Ÿ’ป ์ž‘์„ฑํ•œ ์ฝ”๋“œ

import java.io.*;
import java.util.*;

public class Main {

	static StringBuilder sb = new StringBuilder();
	
	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		StringTokenizer st = new StringTokenizer(br.readLine());
		
		int N = Integer.parseInt(st.nextToken()); // Node์˜ ์ˆ˜
		int M = Integer.parseInt(st.nextToken()); // edge์˜ ์ˆ˜
		int V = Integer.parseInt(st.nextToken()); // ์‹œ์ž‘ Node
		
		ArrayList<Node> nodeList = new ArrayList<>();
		nodeList.add(new Node(0));
		for (int i=1; i<=N ;i++) {
			nodeList.add(new Node(i));
		}
		
		for (int i=0; i<M; i++) {
			st = new StringTokenizer(br.readLine());
			int node1 = Integer.parseInt(st.nextToken());
			int node2 = Integer.parseInt(st.nextToken());
			nodeList.get(node1).edge.add(node2);
			nodeList.get(node2).edge.add(node1);
		}
		
		
		// ๊ฐ๊ฐ node์— ์—ฐ๊ฒฐ๋œ list๋“ค ์žฌ์ •๋ ฌ
		for (int i=1; i<=N; i++) {
			Collections.sort(nodeList.get(i).edge);
		}
		
		
		HashSet<Integer> result = new HashSet<>();
		result.add(V);
		dfs(N, 1, V, nodeList, result);

		sb.append("\n");
		
		result.clear();
		result.add(V);
		bfs(N, V, nodeList, result);
		
		System.out.println(sb.toString());
	}
	
	static void dfs(int maxDepth, int currentDepth, int currentNode, ArrayList<Node> nodeList, HashSet<Integer> dfsResult) throws Exception {	
		sb.append(currentNode+" ");
		
		if (maxDepth == currentDepth) return;

		for (int node: nodeList.get(currentNode).edge) {
			if (!dfsResult.contains(node)) {
				dfsResult.add(node);
				
				dfs(maxDepth, currentDepth+1, node, nodeList, dfsResult);
			}
		}	
	}
	
	static void bfs(int maxSize, int startNode, ArrayList<Node> nodeList, HashSet<Integer> bfsResult) throws Exception {
		Queue<Integer> queue = new LinkedList<>();
		
		queue.addAll(nodeList.get(startNode).edge);
		sb.append(startNode+" ");
		
		int popNum;
		while(!queue.isEmpty()) {		
			popNum = queue.poll();
			if (!bfsResult.contains(popNum)) {
				bfsResult.add(popNum);
				if (bfsResult.size() == maxSize) {
					sb.append(popNum);
					break;
				}
				sb.append(popNum+" ");
				queue.addAll(nodeList.get(popNum).edge);
			}
		}
	}

}

class Node {
	int id; 
	ArrayList<Integer> edge = new ArrayList<>();
	
	public Node(int id) {
		this.id = id;
	}
}
profile
๋ธ”๋กœ๊ทธ ์ด์ „ํ–ˆ์Šต๋‹ˆ๋‹ค. -> https://seongwon.dev/

0๊ฐœ์˜ ๋Œ“๊ธ€