๊ทธ๋ํ
ํ์
๊ทธ๋ํ๋ฅผ ํ์ํ๋ ๊ธฐ๋ฒ์๋ ๋ํ์ ์ผ๋ก 2๊ฐ์ง๊ฐ ์๋ค. ๋๋น ์ฐ์ ํ์์ธ BFS(Breadth-First Search)์ ๊น์ด ์ฐ์ ํ์์ธ DFS(Depth-First Search)์ด๋ค.
BFS
BFS๋ ํ๋ฅผ ์ด์ฉํ์ฌ ๊ตฌํํ๋ค.
์ค๋ช
ํธ๋ฆฌ๋ก ์๋ฅผ ๋ค์์ง๋ง, ๋ชจ๋ ๊ทธ๋ํ์์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋์ํ๋ค.
- ๋ฃจํธ ๋ ธ๋๋ฅผ queue์ ๋ฃ๋๋ค.
-
queue์ ๋ ธ๋๋ฅผ ํ๋ ๊บผ๋ธ ํ, ํด๋น ๋ ธ๋์์ ์ธ์ ๋ ธ๋๋ฅผ ๋ชจ๋ queue์ ๋ฃ๋๋ค.
-
์์ ๋ฐฉ์์ ๋ชจ๋ ๋ ธ๋๊ฐ ์๋ฃ๋ ๋๊น์ง ๋ฐ๋ณตํ๋ค.
stack์ ๋ค์ด๊ฐ ์์๋ฅผ ๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
1=>2=>3=>4=>5=>6=>7=>8
๋ฐ๋ผ์ ํธ๋ฆฌ์์ BFS๋ฅผ ์คํํ์ฌ ํ์์ ํ๋ ๊ฒ์ ๋ ๋ฒจ ์ํ๋ฅผ ํ๋ ๊ฒ๊ณผ ๊ฐ๋ค.
DFS
DFS๋ ์คํ์ ์ด์ฉํ์ฌ ๊ตฌํํ๋ค.
์ค๋ช
ํธ๋ฆฌ๋ก ์๋ฅผ ๋ค์์ง๋ง, ๋ชจ๋ ๊ทธ๋ํ์์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋์ํ๋ค.
- ๋ฃจํธ ๋ ธ๋๋ฅผ queue์ ๋ฃ๋๋ค.
- stack์ ๋ ธ๋๋ฅผ peek(๋งจ ์์ ๋ ธ๋๋ฅผ ๋ณด๊ธฐ๋ง ํจ)ํ ํ, ํด๋น ๋ ธ๋์ ์ธ์ ๋ ธ๋๋ฅผ ํ๋ stack์ ๋ฃ๋๋ค.
- ์์ ๊ณผ์ ์ ๋ฐ๋ณตํ๋, peekํ ๋ ธ๋์ ์ธ์ ๋ ธ๋๊ฐ ๋ชจ๋ ์๋ฃ์ ์๊ฑฐ๋ ์์ ์๋ค๋ฉด ํด๋น ๋ ธ๋๋ฅผ stack์์ ๊บผ๋ธ๋ค.
์ฝ๋
ํธ๋ฆฌ๊ฐ ์๋ ๊ทธ๋ํ์์์ BFS, DFS๋ฅผ ๋ฐฐ์ด๋ก ๊ตฌํํด๋ณด์.
#include <iostream>
#include <stack>
#include <queue>
using namespace std;
int memorize[8];
void BFS(int connect[][8]) {
queue<int> q;
q.push(1); // ๋ฃจํธ ๋ฃ๊ธฐ
do {
int tmp = q.front(); q.pop();
if (memorize[tmp] == 1)
continue;
memorize[tmp] = 1;
cout << tmp << endl;
for (int i = 1; i < 8; i++) {
if (connect[tmp][i] == 1 && memorize[i]==0) { // ์ธ์ ๋
ธ๋๋ ๋ชจ๋ ๋ฃ๊ธฐ
q.push(i);
}
}
} while (!q.empty()); // queue๊ฐ ๋น ๋๊น์ง
}
void DFS(int connect[][8], stack<int> & stk) {
int tmp = stk.top(); // stack์ ์๋ ๋
ธ๋ ๊บผ๋ด๊ธฐ
memorize[tmp] = 1;
cout << tmp << endl;
for (int i = 1; i < 8; i++) {
if (connect[tmp][i] == 1 && memorize[i] == 0) { // ์ธ์ ๋
ธ๋ ํ๋ ๋ฃ๊ธฐ
stk.push(i);
DFS(connect, stk);
}
}
}
void setConnect(int arr[][8], int a, int b) {
arr[a][b] = 1;
arr[b][a] = 1;
}
int main() {
int arr[8] = { 0,1,2,3,4,5,6,7 };
int connect[8][8];
setConnect(connect, 1, 2);
setConnect(connect, 2, 3);
setConnect(connect, 2, 6);
setConnect(connect, 3, 4);
setConnect(connect, 4, 6);
setConnect(connect, 4, 5);
setConnect(connect, 5, 7);
//BFS(connect);
/*
stack<int> stk;
stk.push(1); // ๋ฃจํธ ๋
ธ๋ ๋ฃ๊ธฐ
DFS(connect,stk);
*/
}
์ฐธ๊ณ
https://m.blog.naver.com/ndb796/221230945092
๊ทธ๋ฆผ์ผ๋ก ์ ๋ง ์ ์ค๋ช ํด๋์๋ค.
Comment