https://www.acmicpc.net/problem/1260
1260๋ฒ: DFS์ BFS
์ฒซ์งธ ์ค์ ์ ์ ์ ๊ฐ์ N(1 ≤ N ≤ 1,000), ๊ฐ์ ์ ๊ฐ์ M(1 ≤ M ≤ 10,000), ํ์์ ์์ํ ์ ์ ์ ๋ฒํธ V๊ฐ ์ฃผ์ด์ง๋ค. ๋ค์ M๊ฐ์ ์ค์๋ ๊ฐ์ ์ด ์ฐ๊ฒฐํ๋ ๋ ์ ์ ์ ๋ฒํธ๊ฐ ์ฃผ์ด์ง๋ค. ์ด๋ค ๋ ์ ์ ์ฌ
www.acmicpc.net
static int cnt = 0;
// ๋งํ ์ฝ๋
public static void dfs(int[][] map, boolean[] visited, int v){
// v ํ๋ถํฐ ๋ณด๋ฉด ๋ ๊ฒ.
System.out.print(v+" ");
int newV = 0;
for(int i=0; i<map.length; i++){
if(map[v][i] == 1 & !visited[i]){
visited[i] = true;
newV = i;
cnt++;
break;
}
}
if(cnt != map.length){
dfs(map, visited, newV);
}
}
์ค๋ต๋ ธํธ(ํธ๋ ๋์ ์ฌ๊ณ ๊ณผ์ ๋ฐ ๊ฐ์ ์ )
BFS๋ ๊ทธ๋๋ ํ๋ฅผ ์ฐ๋ฉด์ ์ฝ๊ฒ ๊ตฌํํ๋๋ฐ, DFS๋ฅผ ๊ตฌํ ํ ๋ ์ฌ๊ท๋ฅผ ์ฌ์ฉํ๋๊ฒ ์์ง ์ด๋ ต๊ฒ ๋๊ปด์ง๋ค. ๋ฐ๋ณต์ผ๋ก ์ต์ํด์ง๋ ์ ๋ฐ์ ์์ ๊ฒ ๊ฐ๋ค. ๋ ์ด๋ฒ์ ์ ์ญ๋ณ์๋ฅผ ์ฌ์ฉํ๊ธฐ ์์ํ๋๋ฐ, ์ฌ๊ท๋ฅผ ์ฐ๋ ค๋ฉด ์ ์ญ๋ณ์๋ฅผ ์ฐ๋ ๊ฒ ํธํ๊ธฐ๋ ํ๊ณ , ํจ์๋ก ๋นผ๋ผ ๊ฑฐ๋ฉด ์ธ์๋ก ๋ฃ๋ ๋ฐฉ๋ฒ๋ง๊ณ ์ ์ญ์ผ๋ก ์ ์ธํด์ ์ด๊ธฐํ๋ง ์ ํด์ฃผ๋ฉด ๋ ํธํ๊ฒ ๋ค๋ ์๊ฐ์ด ๋ค์๋ค.
DFS๋ ๊ณ์ ํ๊ณ ํ๊ณ ๋ค์ด๊ฐ๊ณ , BFS๋ ์ธ์ ํ ๊ฑฐ ๋ค ์ฑ๊ธฐ๋ฉด์ ํ๋ ๋ฝ์ ๋ ์ธ์ ํ ๊ฑฐ ๋ค ์ฑ๊ธฐ๊ณ ๋์ด๊ฐ๋ค๋ ๊ฒ๋ง ๊ธฐ์ตํ๊ณ ์์ผ๋ฉด ๋๊ฒ ๋ค. DFS๋ ๊ทธ๋์ Stack์ผ๋ก๋ ๊ตฌํ ๊ฐ๋ฅํ๋ฐ ๋ค๋ฅธ ๋ฌธ์ ์์ ํ๋ฒ ๋์ ํด๋ด์ผ๊ฒ ๋ค.
์ ๋ต์ฝ๋
import java.sql.Array;
import java.util.*;
import java.io.*;
public class Main
{
static int n, m, v;
static int[][] map;
static boolean[] visited; // ์ ์ญ์ผ๋ก ์ฐ๋ ์ด์ ๋ ํจ์์์ ๋ค ๊ฐ๋ค ์ฐ๋ ค๊ณ
static void dfs(int node){
visited[node] = true;
System.out.print(node+" ");
for(int i = 1; i <= n; i++){
if (map[node][i]==1 & !visited[i]){
dfs(i);
}
}
}
public static void main(String[] args) throws Exception {
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
m = sc.nextInt();
v = sc.nextInt();
Queue<Integer> q = new LinkedList<>();
map = new int[n+1][n+1]; // ์ ์ ๊ฐ์ ๋งํผ map
visited = new boolean[n+1];
// ์ธ์ ํ๋ ฌ์ ๊ฐ ๋ฃ๊ธฐ, ๋ฌด๋ฐฉํฅ ๊ทธ๋ํ์.
for(int i=0; i<m; i++){
int src = sc.nextInt();
int dst = sc.nextInt();
map[src][dst] = 1;
map[dst][src] = 1;
}
// DFS
dfs(v);
System.out.println();
visited = new boolean[n+1]; // ๋ฐฉ๋ฌธ ๋ฐฐ์ด์ด๊ธฐํํ๊ธฐ
// BFS
q.offer(v);
while(!q.isEmpty()){
int node = q.poll();
visited[node] = true;
System.out.print(node+" ");
for(int i=1; i<=n; i++){
if(map[node][i] == 1 & !visited[i]){
q.offer(i);
visited[i] = true; // ๋ฃ์ผ๋ฉด์ ๋ฐฉ๋ฌธ์ฒ๋ฆฌ๋ฅผ ํด์ค์ผ ๋จ. ์ํ๋ฉด ๋๊ฐ์ ์ ์ ์ด ์ค๋ณต์ผ๋ก ์ถ๊ฐ ๋จ
}
}
}
}
}
๋์์ด ๋๋ค๋ฉด ๋๊ธ์ด๋ ๊ณต๊ฐ ๋ฒํผ ํ ๋ฒ์ฉ ๋๋ฅด๊ณ ๊ฐ์ฃผ์ธ์! ๋ก๊ทธ์ธ ์ํด๋ ๋ฉ๋๋ค ^_^
'OJ๐ผ > ์ค๋ต๋ ธํธ๐' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ][JAVA] 1021: ํ์ ํ๋ ํ (0) | 2024.01.16 |
---|---|
[BOJ][JAVA] 11068: ํ๋ฌธ์ธ ์ (0) | 2024.01.14 |
[BOJ][JAVA] 1158 : ์์ธํธ์ค ๋ฌธ์ (0) | 2024.01.11 |
[BOJ][JAVA] 10814: ๋์ด์ ์ ๋ ฌ (0) | 2024.01.09 |
[BOJ][JAVA] 10816: ์ซ์ ์นด๋ 2 (0) | 2024.01.08 |