PS/BOJ
1260
easy16
2022. 5. 6. 20:04
DFS와 BFS
기본 그래프 출력하기 : https://www.acmicpc.net/problem/1260
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
static int N, M, V;
static int[][] graph;
static boolean[] visited;
static boolean DBG = false;
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());
visited = new boolean[N + 1];
graph = new int[N + 1][N + 1];
V = Integer.parseInt(st.nextToken());
for (int i = 1; i <= M; i++) {
st = new StringTokenizer(br.readLine());
int x = Integer.parseInt(st.nextToken());
int y = Integer.parseInt(st.nextToken());
graph[x][y] = graph[y][x] = 1;
}
StringBuilder sb = new StringBuilder();
dfs(0, V, sb);
sb.append('\n');
bfs(V, sb);
System.out.println(sb.toString());
}
private static void bfs(int v, StringBuilder sb) {
visited = new boolean[N + 1];
Queue<Integer> Q = new LinkedList<>();
Q.offer(v);
while (!Q.isEmpty()) {
int size = Q.size();
for (int q = 0; q < size; ++q) {
int now = Q.poll();
if(visited[now])
continue;
visited[now]=true;
sb.append(now).append(' ');
for ( int i = 1; i<=N ; i++) {
if( graph[now][i] == 1 && !visited[i])
Q.offer(i);
}
}
}
}
private static void dfs(int level, int v, StringBuilder sb) {
if (level == N) {
return;
}
if (visited[v])
return;
sb.append(v).append(' ');
visited[v] = true;
for (int i = 1; i <= N; i++) {
if (graph[v][i] == 1) {
dfs(level + 1, i, sb);
}
}
}
}