DFS(Depth-First Search) : ๊น์ด ์ฐ์ ํ์
ํน์ง
- ๋ชจ๋ ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธ
- ์ฌ๊ทํจ์ or ์คํ์ผ๋ก ๊ตฌํ
๋์ ๊ณผ์

1. ์์ ๋
ธ๋ ์คํ์ ์ฝ์
ํ๊ณ visited = true ์ฒ๋ฆฌ
2. ์คํ ์ต์๋จ ๋
ธ๋์ ์ธ์ ํ ๋
ธ๋ ์ค ์์ง visited X ๋
ธ๋๊ฐ ์๋ค?
์๋ค) visited X ๋
ธ๋๋ฅผ ์คํ์ ๋ฃ๊ณ visited = true ์ฒ๋ฆฌ
์๋ค) ์คํ ์ต์๋จ ๋
ธ๋ ๊บผ๋
3. 2๋ฒ ์ํํ ์ ์์ ๋๊น์ง ๋ฐ๋ณต
์ธ์ ์ฌ์ฉํด์ผ ํ ๊น?
- ๋ชจ๋ ๋ ธ๋๋ฅผ ๋ค ํ์ํด์ผ ํ๋ ๊ฒฝ์ฐ
- ๊ฒฝ๋ก์ ํน์ง, ์ง๋์จ ๋ ธ๋์ ๋ํ ์ ๋ณด๊ฐ ํ์ํ ๊ฒฝ์ฐ
์์ค์ฝ๋
#include <iostream>
#include <vector>
using namespace std;
bool visited[9];
vector<int> graph[9];
void dfs(int x) {
visited[x] = true;//๋
ธ๋ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ
cout << x << " ";
for (int i = 0; i < graph[x].size(); i++) {
int y = graph[x][i];//์ธ์ ๋
ธ๋
if (!visited[y]) dfs(y);//๋ฐฉ๋ฌธx->์ฌ๊ท
}
}
BFS(Breadth-First Search) : ๋๋น ์ฐ์ ํ์
ํน์ง
- ๊ฐ๊น์ด ๋ ธ๋๋ถํฐ ํ์
- ํ ์๋ฃ๊ตฌ์กฐ ์ด์ฉ
๋์ ๊ณผ์

1. ์์ ๋
ธ๋ ํ์ ์ฝ์
ํ๊ณ visited = true ์ฒ๋ฆฌ
2. ํ์์ ๋
ธ๋๋ฅผ ๊บผ๋ธ ๋ค, ์ธ์ ๋
ธ๋ ์ค visited X ๋
ธ๋๋ฅผ ์ ๋ถ ํ์ ์ฝ์
ํ๊ณ visited = true ์ฒ๋ฆฌ
3. 2๋ฒ ์ํํ ์ ์์ ๋๊น์ง ๋ฐ๋ณต
์ธ์ ์ฌ์ฉํด์ผ ํ ๊น?
- ๋ฏธ๋ก ํ์
- ์ต๋จ ๊ฒฝ๋ก
- ํ์ ์ ์ฝ ์กฐ๊ฑด์ด ์๋ ๊ฒฝ์ฐ ex) ๊ฐ์ค์น
์์ค์ฝ๋
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
bool visited[9];
vector<int> graph[9];
void bfs(int start) {
queue<int> q;
q.push(start);//์ฒ์ ๋
ธ๋ ์ฝ์
visited[start] = true;//๋ฐฉ๋ฌธ ์ฒ๋ฆฌ
while (!q.empty()) {
int x = q.front();
q.pop();//๋งจ ์ ๋
ธ๋ ๊บผ๋
cout << x << " ";
for (int i = 0; i < graph[x].size(); i++) {
int y = graph[x][i];//์ธ์ ๋
ธ๋
if (!visited[y]) {
//๋ฐฉ๋ฌธํ์ง ์์ ๋
ธ๋ ํ์ ์ฝ์
q.push(y);
visited[y] = true;//๋ฐฉ๋ฌธ ์ฒ๋ฆฌ
}
}
}
}
'๐ก Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ฌ๊ท] ์ฌ๊ท ํจ์์ stringify ๊ตฌํ (0) | 2022.09.21 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค] ๊ฒ์ ๋งต ์ต๋จ๊ฑฐ๋ฆฌ (with Python) (0) | 2022.08.04 |