(์ด์ฝํ 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 |
---|