(์ด์ฝํ 2021 ๊ฐ์ ๋ชฐ์๋ณด๊ธฐ) 3. DFS & BFS)๋ฅผ ๋ณด๋ฉด์ ์์ฑํ ๊ธ์ ๋๋ค.
DFS๋
DFS
๋ ๋ํ์ ์ธ ๊ทธ๋ํ ํ์
์๊ณ ๋ฆฌ์ฆ ์ค ํ๋์
๋๋ค. ํ์์ด๋ ๋ง์ ์์ ๋ฐ์ดํฐ ์ค ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ์ฐพ๋ ๊ณผ์ ์ ๋งํฉ๋๋ค. DFS๋ผ๋ ๋ง์์๋ ์ ์ ์๋ฏ์ด ๊น์ด(Depth)
๋ฅผ ์ฐ์ ์ ์ผ๋ก ํ์ํฉ๋๋ค.
๊น์ด
๋ฅผ ์ฐ์ ์ ์ผ๋ก ํ์ํ๋ค๋ ๋ง์ ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ต๋๋ค.
๋ฒํธ๊ฐ ๋ฎ์ ์ธ์ ๋ ธ๋๋ถํฐ DFS๋ก ์ ๊ทธ๋ํ๋ฅผ ํ์ํ๋ฉด 1 -> 2 -> 7 -> 6 -> 8 -> 3 -> 4 -> 5 ์์ผ๋ก ํ์ํ๊ฒ ๋ฉ๋๋ค.
DFS ๊ตฌํ
DFS๋ ์คํ ํน์ ์ฌ๊ทํจ์๋ก ๊ตฌํํ ์ ์์ต๋๋ค. ํ์ง๋ง, ๋ณดํต ํธ๋ฆฌ์ฑ ๋๋ฌธ์ ์คํ๋ณด๋ค ์ฌ๊ทํจ์
๋ฅผ ์ด์ฉํด ๊ตฌํํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
import java.util.*;
public class Main {
public static boolean[] visited = new boolean[9];
public static ArrayList<ArrayList<Integer>> graph = new ArrayList<>();
public static void dfs(int x) {
visited[x] = true;
System.out.print(x + " ");
for (int i = 0; i < graph.get(x).size(); i++) {
int y = graph.get(x).get(i);
if(!visited[y]) dfs(y);
}
}
public static void main(String[] args) {
// ๊ทธ๋ํ ์ด๊ธฐํ
for (int i = 0; i < 9; i++) {
graph.add(new ArrayList<Integer>());
}
// ๋
ธ๋ 1์ ์ฐ๊ฒฐ๋ ๋
ธ๋ ์ ๋ณด ์ ์ฅ
graph.get(1).add(2);
graph.get(1).add(3);
graph.get(1).add(8);
// ๋
ธ๋ 2์ ์ฐ๊ฒฐ๋ ๋
ธ๋ ์ ๋ณด ์ ์ฅ
graph.get(2).add(1);
graph.get(2).add(7);
// ๋
ธ๋ 3์ ์ฐ๊ฒฐ๋ ๋
ธ๋ ์ ๋ณด ์ ์ฅ
graph.get(3).add(1);
graph.get(3).add(4);
graph.get(3).add(5);
// ๋
ธ๋ 4์ ์ฐ๊ฒฐ๋ ๋
ธ๋ ์ ๋ณด ์ ์ฅ
graph.get(4).add(3);
graph.get(4).add(5);
// ๋
ธ๋ 5์ ์ฐ๊ฒฐ๋ ๋
ธ๋ ์ ๋ณด ์ ์ฅ
graph.get(5).add(3);
graph.get(5).add(4);
// ๋
ธ๋ 6์ ์ฐ๊ฒฐ๋ ๋
ธ๋ ์ ๋ณด ์ ์ฅ
graph.get(6).add(7);
// ๋
ธ๋ 7์ ์ฐ๊ฒฐ๋ ๋
ธ๋ ์ ๋ณด ์ ์ฅ
graph.get(7).add(2);
graph.get(7).add(6);
graph.get(7).add(8);
// ๋
ธ๋ 8์ ์ฐ๊ฒฐ๋ ๋
ธ๋ ์ ๋ณด ์ ์ฅ
graph.get(8).add(1);
graph.get(8).add(7);
dfs(1);
}
}
- 2์ฐจ์ ๋ฐฐ์ด์ ์ด์ฉํด์ ๊ทธ๋ํ๋ฅผ ํํํฉ๋๋ค. graph์ i๋ฒ์งธ์ ์๋ ๋ฐฐ์ด์ i์ ์ฐ๊ฒฐ๋ ๋ ธ๋๋ค์ ๋๋ค.
- ํ์ํ๋์ง ์ฌ๋ถ๋ฅผ ์ฒดํฌํ๋ visited ๋ฐฐ์ด์ ์์ฑํฉ๋๋ค.
- dfs ํจ์์ ๋งค๊ฐ๋ณ์ x๋ ํ์์ ์์ํ๊ณ ์ ํ๋ ๋ ธ๋๋ฅผ ๊ฐ๋ฆฌํต๋๋ค. dfs ํจ์๋ ํด๋น ๋ ธ๋๋ฅผ ํ์ํ๋ค๋ฉด ๋ฐฉ๋ฌธ์ฒ๋ฆฌ(true)๋ฅผ ํด์ฃผ๊ณ ์ฐ๊ฒฐ๋ ๋ค๋ฅธ ๋ ธ๋๋ฅผ ์ฌ๊ท์ ์ผ๋ก ๋ฐฉ๋ฌธํฉ๋๋ค.
DFS ๊ด๋ จ ๋ฌธ์
'๐ป CS > Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
BFS | ์๋ฐ (0) | 2024.11.01 |
---|