https://www.acmicpc.net/problem/1260
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.InputStreamReader;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
public class Main {
static int N, M;
static boolean[][] map;
static boolean[] visited;
static StringBuilder sb = new StringBuilder();
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
int 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 from = Integer.parseInt(st.nextToken());
int to = Integer.parseInt(st.nextToken());
map[from][to] = map[to][from] = true;
}
dfs(V);
sb.append("\n");
Arrays.fill(visited, false);
bfs(V);
System.out.println(sb);
}
private static void dfs(int v) {
visited[v] = true;
sb.append(v).append(" ");
for (int i = 1; i <= N; i++) {
if (map[v][i] && !visited[i]) {
dfs(i);
}
}
}
private static void bfs(int v) {
Queue<Integer> q = new LinkedList<>();
q.offer(v);
visited[v] = true;
int curr = 0;
while (!q.isEmpty()) {
curr = q.poll();
sb.append(curr).append(" ");
for (int i = 1; i <= N; i++) {
if (map[curr][i] && !visited[i]) {
q.offer(i);
visited[i] = true;
}
}
}
}
}'Baekjoon Online Judge > Java' 카테고리의 다른 글
| [Baekjoon Online Judge] 1100 - 하얀 칸 / Java (0) | 2021.07.16 |
|---|---|
| [Baekjoon Online Judge] 2667 - 단지번호붙이기 / Java (0) | 2021.06.26 |
| [Baekjoon Online Judge] 2583 - 영역 구하기 / Java (0) | 2021.06.24 |
| [Baekjoon Online Judge] 18290 - NM과 K (1) / Java (0) | 2021.06.23 |
| [Baekjoon Online Judge] 15655 - N과 M (6) / Java (0) | 2021.06.22 |