(์ด์ฝํ 2021 ๊ฐ์ ๋ชฐ์๋ณด๊ธฐ) 3. DFS & BFS)๋ฅผ ๋ณด๋ฉด์ ์์ฑํ ๊ธ์ ๋๋ค.
BFS๋
BFS
๋ ์ด์ ์ ํฌ์คํ
ํ๋ DFS์ ํจ๊ป๋ํ์ ์ธ ๊ทธ๋ํ ํ์
์๊ณ ๋ฆฌ์ฆ ์ค ํ๋์
๋๋ค. BFS๋ผ๋ ๋ง์์๋ ์ ์ ์๋ฏ์ด ๋๋น(Breadth)
๋ฅผ ์ฐ์ ์ ์ผ๋ก ํ์ํฉ๋๋ค.
๋๋น
๋ฅผ ์ฐ์ ์ ์ผ๋ก ํ์ํ๋ค๋ ๋ง์ ๊ทธ๋ํ์์ ๊ฐ๊น์ด ๋
ธ๋๋ถํฐ ์ฐ์ ์ ์ผ๋ก ํ์ํ๋ ๊ฒ์ด๋ฉฐ, ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ต๋๋ค.

๋ฒํธ๊ฐ ๋ฎ์ ์ธ์ ๋ ธ๋๋ถํฐ DFS๋ก ์ ๊ทธ๋ํ๋ฅผ ํ์ํ๋ฉด 1 -> 2 -> 3 -> 8 -> 7 -> 4 -> 5 -> 6 ์์ผ๋ก ํ์ํ๊ฒ ๋ฉ๋๋ค.
BFS ๊ตฌํ
BFS๋ Queue ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ด์ฉํด์ ๊ตฌํํฉ๋๋ค.
import java.util.*; class Main { public static boolean[] visited = new boolean[9]; public static ArrayList<ArrayList<Integer>> graph = new ArrayList<>(); public static void bfs(int start) { Queue<Integer> q = new LinkedList<>(); q.offer(start); visited[start] = true; while(!q.isEmpty()) { int x = q.poll(); System.out.print(x + " "); for(int i = 0; i < graph.get(x).size(); i++) { int y = graph.get(x).get(i); if(!visited[y]) { q.offer(y); visited[y] = true; } } } } 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); bfs(1); } }
์๋์ ๊ฐ์ ๋ก์ง์ผ๋ก BFS๋ฅผ ์ฝ๋๋ฅผ ์์ฑํ์ต๋๋ค.
- ์์ ๋ ธ๋๋ฅผ ํ์ ์ฝ์ ํ๊ณ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌํฉ๋๋ค.
- ํ์์ ๋ ธ๋๋ฅผ ๊บผ๋ธ ๋ค ํด๋น ๋ ธ๋์ ์ธ์ ๋ ธ๋ ์ค์์ ๋ฐฉ๋ฌธํ์ง ์์ ๋ชจ๋ ๋ ธ๋๋ฅผ ํ์ ๋ฃ๊ณ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌํฉ๋๋ค.
BFS ๊ด๋ จ ๋ฌธ์
'๐ป CS > Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
DFS | ์๋ฐ (0) | 2024.10.31 |
---|