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