https://www.acmicpc.net/problem/1260
1. 아이디어
문제 이름 그대로 DFS와 BFS로 풀면 된다.
2. 문제풀이
DFS와 BFS의 기본 구현을 할 수 있으면 해결할 수 있는 문제로 인접리스트 기반으로 구현했다. 출력을 위해 StringBuilder를 정적 변수로 사용해서 활용했고, 번호가 작은 정점을 우선으로 방문하기 위해 인접리스트를 한번 정렬해줘야 한다.
3. 코드
import java.io.*;
import java.util.*;
public class Main {
private static final StringBuilder sb = new StringBuilder();
private static boolean[] visited;
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());
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
int V = Integer.parseInt(st.nextToken());
List<List<Integer>> adj = new ArrayList<>();
for (int i = 0; i <= N; i++) {
adj.add(new ArrayList<>());
}
for (int i = 0; i < M; i++) {
st = new StringTokenizer(br.readLine());
int u = Integer.parseInt(st.nextToken());
int v = Integer.parseInt(st.nextToken());
adj.get(u).add(v);
adj.get(v).add(u);
}
for (int i = 1; i <= N; i++) {
adj.get(i).sort(Comparator.naturalOrder());
}
visited = new boolean[1 + N];
dfs(V, adj);
sb.append("\n");
visited = new boolean[1 + N];
bfs(V, adj);
sb.append("\n");
bw.write(sb.toString());
bw.flush();
}
private static void dfs(int node, List<List<Integer>> adj) {
visited[node] = true;
sb.append(node).append(" ");
for (int next : adj.get(node)) {
if (visited[next]) continue;
dfs(next, adj);
}
}
private static void bfs(int start, List<List<Integer>> adj) {
Queue<Integer> q = new ArrayDeque<>();
q.offer(start);
visited[start] = true;
while (!q.isEmpty()) {
int node = q.poll();
sb.append(node).append(" ");
for (int next : adj.get(node)) {
if (visited[next]) continue;
q.offer(next);
visited[next] = true;
}
}
}
}
4. 후기
'코딩테스트 준비 > 백준' 카테고리의 다른 글
[백준] 2606번 - 바이러스 [Java] (0) | 2025.01.17 |
---|---|
[백준] 7562번 - 나이트의 이동 [Java] (0) | 2025.01.17 |
[백준] 11724번 - 연결 요소의 개수 [Java] (0) | 2025.01.17 |
[백준] 2822번 - 점수 계산 [Java] (0) | 2025.01.17 |
[백준] 13136번 - Do Not Touch Anything [Java] (0) | 2025.01.17 |