[백준] 1260 DFS와 BFS - 자바카테고리 없음2024. 1. 18. 22:56
Table of Contents
import java.io.*;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
public class Main {
static boolean[][] map;
static boolean[] visited;
static int N, M, V;
static StringBuilder sb = new StringBuilder();
static Queue<Integer> queue = new LinkedList<>();
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
V = Integer.parseInt(st.nextToken());
map = new boolean[N + 1][N + 1];
visited = new boolean[N + 1];
for(int i=0; i<M; i++){
st = new StringTokenizer(br.readLine());
int x = Integer.parseInt(st.nextToken());
int y = Integer.parseInt(st.nextToken());
map[x][y] = true;
map[y][x] = true;
}
dfs(V);
sb.append("\n");
visited = new boolean[N + 1];
bfs(V);
bw.write(sb + "\n");
bw.flush();
br.close();
bw.close();
}
//재귀를 통해 하나씩 찾아나가는 방식
public static void dfs(int idx){
visited[idx] = true;
sb.append(idx).append(" ");
for(int i=1; i<=N; i++){
if(!visited[i] && map[idx][i]){
dfs(i);
}
}
}
/*현재 노드의 자식 노드를 전부 큐에 넣어서
큐의 노드를 하나씩 확인하는 방식*/
public static void bfs(int idx){
visited[idx] = true;
queue.add(idx);
while (!queue.isEmpty()){
int index = queue.poll();
sb.append(index).append(" ");
for(int i=1; i<=N; i++){
if(!visited[i] && map[index][i]){
visited[i] = true;
queue.add(i);
}
}
}
}
}
@뽀글뽀글 개발자 :: 뽀글뽀글 개발 일지
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!