// DFS와 BFS
package Silver_II_2;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
public class Ex1260 {
static StringBuilder sb = new StringBuilder();
static boolean[] check; // 탐색했던 노드인지 검사하기 위한 배열
static int[][] arr; // 노드 간의 간선을 표현해 주기 위한 표
static int node, line, start; // 정점의 개수, 간선의 개수, 탐색을 시작할 정점의 번호
static Queue<Integer> queue = new LinkedList<>();
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
node = Integer.parseInt(st.nextToken());
line = Integer.parseInt(st.nextToken());
start = Integer.parseInt(st.nextToken());
arr = new int[node+1][node+1];
check = new boolean[node+1];
for (int i = 0; i < line; i++) {
st = new StringTokenizer(br.readLine());
int a = Integer.parseInt(st.nextToken()); // 간선이 연결하는 정점의 번호 1
int b = Integer.parseInt(st.nextToken()); // 간선이 연결하는 정점의 번호 2
arr[a][b] = arr[b][a] = 1; // 인접 행렬 방법
}
dfs(start);
sb.append("\n");
check = new boolean[node+1]; // check 배열 초기화
bfs(start);
System.out.println(sb);
}
static void dfs(int start) { // 깊이 우선 탐색 메서드 실행
check[start] = true; // 탐색 했으므로 true
sb.append(start + " ");
for (int i = 0; i <= node; i++) {
if (arr[start][i] == 1 && !check[i]) { // 노드가 존재하고 탐색하지 않았을 떄
dfs(i);
}
}
}
static void bfs(int start) { // 너비 우선 탐색
queue.add(start);
check[start] = true; // 탐색 했으므로 true
while (!queue.isEmpty()) {
start = queue.poll();
sb.append(start + " ");
for (int i = 1; i <= node; i++) {
if (arr[start][i] == 1 && !check[i]) { // 노드가 존재하고 탐색하지 않았을 떄
queue.add(i);
check[i] = true;
}
}
}
}
}
DFS와 BFS 관련 문제는 처음 풀어본다. 처음엔 혼자서 해보려고 했지만, 갈피를 잡지 못 해서 블로그를 보고 푼 뒤에 주석을 세세히 달아서 이해하는 식으로 진행했다. 지금은 처음이라 그랬지만, 점차 익숙해지면 스스로도 가능할 것이다.
아래는 내가 본 블로그다.
[백준알고리즘-JAVA]1260번 풀이(DFS와 BFS) - 초보도 이해하는 풀이 (tistory.com)
[백준알고리즘-JAVA]1260번 풀이(DFS와 BFS) - 초보도 이해하는 풀이
안녕하세요 인포돈 입니다. 백준 알고리즘 1260번 풀이입니다. * 참고사항 - 개발환경은 eclipse을 기준으로 작성되었습니다. - java언어를 이용하여 문제를 풀이합니다. - 알고리즘 문제는 풀이를 보
infodon.tistory.com
'백준 풀이 > 자바(Java)' 카테고리의 다른 글
백준 18408 자바 - 3 つの整数 (Three Integers) (0) | 2024.05.04 |
---|---|
백준 26332 자바 - Buying in Bulk (0) | 2024.05.03 |
백준 18111 자바 - 마인크래프트 (1) | 2024.05.01 |
백준 25893 자바 - Majestic 10 (0) | 2024.04.30 |
백준 20232 자바 - Archivist (0) | 2024.04.29 |