코테 공부

[DFS|BFS] 백준 1260번, 자바☆

DaEun_ 2023. 1. 29. 01:25

1260번: DFS와 BFS (acmicpc.net)

 

1260번: DFS와 BFS

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

www.acmicpc.net

 

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;

public class Main2 {

	static int M,N;
	static int[][] edge;
	static boolean[] visit;
	static StringBuilder sb;
	static Queue<Integer> q;
	
	
	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub

		Scanner sc=new Scanner(System.in);
		M=sc.nextInt();
		N=sc.nextInt();
		int V=sc.nextInt();
		
		visit=new boolean[M+1];
		edge=new int[M+1][M+1];
		q=new LinkedList<>();
		
		sb=new StringBuilder("");
		
		for(int i=0;i<N;i++) {
			int a=sc.nextInt();
			int b=sc.nextInt();
			
			edge[a][b]=1;
			edge[b][a]=1;
			
		}
		
		dfs(V);
		System.out.println(sb.toString());
		sb=new StringBuilder("");
		bfs(V);
		System.out.println(sb.toString());
		
	}
	
	static void dfs(int x) {
		visit[x]=true;
		sb.append(x+" ");
		for(int i=1;i<=M;i++) {
			if(edge[x][i]==0 || visit[i] ) continue;
			
				dfs(i);
			}
		}
		
	
	static void bfs(int x) {
		visit[x]=false;
		q.add(x);
		
		while(!q.isEmpty()) {
			int qq=q.poll();
			sb.append(qq+" ");
			for(int i=1;i<=M;i++) {
				if(edge[qq][i]==0 || !visit[i] ) continue;
				visit[i]=false;
				q.add(i);
			}
			
		}
		
	}
	
}