코테 공부
[DFS|BFS] 백준 1260번, 자바☆
DaEun_
2023. 1. 29. 01:25
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);
}
}
}
}