문제



💡 일단 생각하기!
- 문제 이름 그대로 DFS와 BFS로 풀면 되는 문제!
너무 오랜만에 알고리즘을 풀어서 푸는 데 꽤나 걸렸다 . . ☆ . .
👀 풀이
package BJ;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
import java.util.Queue;
import java.util.StringTokenizer;
public class Main {
static int N, M, V;
static boolean arr[][], visited[];
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
V = Integer.parseInt(st.nextToken());
arr = new boolean[N + 1][N + 1];
visited = new boolean[N + 1];
for (int i = 0; i < M; i++) {
st = new StringTokenizer(br.readLine());
int A = Integer.parseInt(st.nextToken());
int B = Integer.parseInt(st.nextToken());
arr[A][B] = true;
arr[B][A] = true;
}
dfs(V, 0);
System.out.println();
visited = new boolean[N + 1];
bfs(V);
}
public static void bfs(int n) {
Queue<Integer> queue = new ArrayDeque<>();
queue.add(n);
visited[n] = true;
while (!queue.isEmpty()) {
int cur = queue.poll();
System.out.print(cur + " ");
for (int i = 1; i <= N; i++) {
if (arr[cur][i] && !visited[i]) {
queue.add(i);
visited[i] = true;
}
}
}
}
public static void dfs(int n, int count) {
if (count == N) {
return;
}
visited[n] = true;
System.out.print(n + " ");
for (int i = 1; i <= N; i++) {
if (!visited[i] && arr[n][i]) {
dfs(i, count + 1);
}
}
}
}