코딩테스트/백준

백준 1260 : DFS와 BFS _자바 Java

플래시🦥 2023. 1. 20.
반응형

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

 

1260번: DFS와 BFS

첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사

www.acmicpc.net


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

public class Main {
	
	static int[][] arr;
	static boolean[] check;
	static Queue<Integer> qu = new LinkedList<>();
	
	static StringBuilder sb = new StringBuilder();
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String[] str =br.readLine().split(" ");
		int N = Integer.parseInt(str[0]);	//정점의 개수
		int M = Integer.parseInt(str[1]);	//간선의 개수
		int V = Integer.parseInt(str[2]);	//탐색 시작한 정점의 번호
		
		arr= new int[N+1][N+1];
		check=new boolean [N+1];
		
		for(int i =0;i<M;i++) {
			str=br.readLine().split(" ");
			int r=Integer.parseInt(str[0]);
			int c=Integer.parseInt(str[1]);
			arr[r][c]=1;
			arr[c][r]=1;	
		}
		
		dfs(V);	//깊이
		sb.append("\n");
		check=new boolean [N+1];
		bfs(V);	//너비
		
		System.out.println(sb);
	}// main()
	
	static void dfs(int k) {
		if(check[k])
			return;
		
		check[k]=true;
		sb.append(k+" ");
		for(int i=0;i<arr[k].length;i++) {
			if(arr[k][i]==1&&!check[i])
				dfs(i);
		}
	}//dfs()
	
	static void bfs(int k) {
		qu.add(k);
		check[k]=true;
		
		while(!qu.isEmpty()) {
			k=qu.poll();
			sb.append(k+" ");
			
			for(int i=0;i<arr[k].length;i++) {
				if(arr[k][i]==1&&!check[i]) {
					qu.add(i);
					check[i]=true;
				}
			}
		}
		
		
	}//bfs()
	
	
}// class Main

 

728x90
반응형

댓글