์ ํ ๊ตฌ์กฐ๊ฐ ์๋ ๋น์ ํ ๊ตฌ์กฐ ํ์ ์ํด์ ๊น์ด ์ฐ์ ํ์(DFS)๊ณผ ๋๋น ์ฐ์ ํ์(BFS)์ ์ฌ์ฉํ๋ค.
๋๋น ์ฐ์ ํ์์ ๋ธ๋ฃจํธ ํฌ์ค์ ๊ด๋ จ์ด ๊น๊ณ ๊น์ด ์ฐ์ ํ์์ ๋ฐฑํธ๋ํน๊ณผ ๊ด๋ จ์ด ๊น๋ค.
DFS
๊ทธ๋ํ์ ๋ชจ๋ ์ ์ ๋ฐฉ๋ฌธ
๋งํ ์ ์ ์ ๋๋ฌํ์ง ์๋ ํ ๋ค๋ก ๋์๊ฐ์ง ์๋๋ค ์ฆ ๋ ๋ฐ๋ผ๊ฐ ๊ฐ์ ์ด ์์ ๊ฒฝ์ฐ ์ด์ ์ผ๋ก ๋์๊ฐ๋ค. ์ด๋ฅผ ๊ตฌํํ๊ธฐ ์ํด ์ง๊ธ๊น์ง ๊ฑฐ์ณ ์จ ์ ์ ๋ชจ๋ ์ ์ฅ ํด ๋ฌ์ผ ํ๋๋ฐ ์ฌ๊ท ํธ์ถ ์ด์ฉํ๋ฉด ์ด ๊ฐ์ ์ผ์ ๊ฐ๋จํ๊ฒ ํ ์ ์๋ค. ์ฌ๊ท ํธ์ถํ ํจ์๊ฐ ์ข ๋ฃํ๋ฉด ํธ์ถํ ์์น๋ก ๋ค์ ๋์๊ฐ๊ธฐ ๋๋ฌธ์ด๋ค.
DFS ํน์ง
- ๋ฐฉ๋ฌธํ ์ ์ ์ ์์์ผ ํ๋ค. ๋ฐ๋ผ์ ๊ฐ ์ ์ ์ ๋ฐฉ๋ฌธ ์ฌ๋ถ๋ฅผ ์ ์ฅํ๋ ์๋ฃ๊ตฌ์กฐ๊ฐ ํ์
- ๋์ด์ ๋ฐฉ๋ฌธํ ์ ์ ์ด ์์ผ๋ฉด ์ด์ ์ ์ ์ผ๋ก ๋์๊ฐ์ผ ํ๋ค -> ์ฌ๊ท, stack ์ด์ฉ
- ๊ทธ๋ํ๊ฐ ๋ถ๋ฆฌ๋์ด ์์ ์๋ ์๋ค๋ ์ฌ์ค ๊ณ ๋ คํ์ง ์๋๋ค.
์๊ณ ๋ฆฌ์ฆ ์์
- ์์ ๋ ธ๋ ๋ฐฉ๋ฌธ (with ๋ฐฉ๋ฌธ ํ์)
- ์์ ๋ ธ๋์ ์ธ์ ํ ๋ ธ๋ ๋ฐฉ๋ฌธ
- ์์ ๋ ธ๋์ ์ธ์ ํ ๋ ธ๋ b ๋ฐฉ๋ฌธ ์ b์ ์ด์ ๋ ธ๋ ๋ฐฉ๋ฌธ
- b ๋ ธ๋์ ๋ํด dfs ํ์ฌ b์ ์ด์ ๋ ธ๋ ๋ชจ๋ ๋ฐฉ๋ฌธ
- b ๋ ธ๋ ์ด์ ๋ ธ๋ ๋ค ๋ฐฉ๋ฌธํ๋ค๋ฉด ๋ค์ a์ ์ธ์ ํ ์ ์ ๋ค ์ค ๋ฐฉ๋ฌธ์ด ์๋ ๋ ธ๋ ๋ฐฉ๋ฌธ
- ๋ค ๋ฐฉ๋ฌธ์ ์ข ๋ฃ
- ์์ง ๋ฐฉ๋ฌธ์ด ์๋ ์ ์ ์ด ์์ผ๋ฉด ๊ทธ ์ ์ ์ ์์ ์ ์ ์ dfs
- ์ธ์ ํ๋ ฌ๋ก ํํ๋ ๊ทธ๋ํ : O(N^2)
- ์ธ์ ๋ฆฌ์คํธ๋ก ํํ๋ ๊ทธ๋ํ : O(N+E)
BFS
๊ทธ๋ํ ํ์
๋ฃจํธ ๋ ธ๋์์ ์ธ์ ํ ๋ ธ๋๋ฅผ ๋จผ์ ํ์ํ๋ ๋ฐฉ๋ฒ, ๊ฐ๊น์ด ์ ์ ๋จผ์ ๋ฐฉ๋ฌธํ๊ณ ๋ฉ๋ฆฌ ๋จ์ด์ง ์ ์ ๋์ค์ ๋ฐฉ๋ฌธ
๋ ๋ ธ๋ ์ฌ์ด ์ต๋จ ๊ฒฝ๋ก, ์์์ ๊ฒฝ๋ก ์ฐพ๊ณ ์ถ์ ๋ ์ฌ์ฉ
์ฌ๊ท์ ์ผ๋ก ๋์ํ์ง ์๋๋ค.
์ด๋ค ๋ ธ๋ ๋ฐฉ๋ฌธํ์๋์ง ์ฌ๋ถ๋ฅผ ๋ฐ๋์ ๊ฒ์ฌํด์ผ ํ๋ค ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ ๋ฌดํ ๋ฃจํ์ ๋น ์ง ์ํ์ฑ์ ๊ฐ์ง๋ค.
๋ฐฉ๋ฌธํ ๋ ธ๋ ์ฐจ๋ก๋ก ์ ์ฅํ ํ ๊บผ๋ผ ์์๋ ์๋ฃ๊ตฌ์กฐ ํ ์ฌ์ฉํ๋ค.
๋ค์ต์คํธ๋ผ, ํ๋ฆผ ์๊ณ ๋ฆฌ์ฆ๊ณผ ์ ์ฌํ๋ค
์๊ณ ๋ฆฌ์ฆ ์์
- ์์ ๋ ธ๋ ๋ฐฉ๋ฌธ + ๋ฐฉ๋ฌธ ๋ ธ๋ ์ฒดํฌ
- ํ์ ๋ฐฉ๋ฌธํ ๋ ธ๋ ์ฝ์
- ์ด๊ธฐ ์ํ ํ๋ ์์ ๋ ธ๋๋ง ์ ์ฅ
- ํ์์ ๊บผ๋ธ ๋ ธ๋์ ์ธ์ ๋ ธ๋ ์ฐจ๋ก๋ก ๋ฐฉ๋ฌธ
- ํ์์ ๊บผ๋ธ ๋ ธ๋ ๋ฐฉ๋ฌธ
- ํ์์ ๊บผ๋ธ ๋ ธ๋์ ์ธ์ ๋ ธ๋ ๋ฐฉ๋ฌธ - ์ธ์ ๋ ธ๋ ์์ผ๋ฉด ํ์์ ๋ ธ๋ ๊บผ๋
- ํ์์ ๋ฐฉ๋ฌธ๋ ๋ ธ๋ ์ฝ์
- ํ ์์ง๋๊น์ง ๋ฐ๋ณต
- ์ธ์ ๋ฆฌ์คํธ๋ก ํํ๋ ๊ทธ๋ํ : O(N+E)
- ์ธ์ ํ๋ ฌ๋ก ํํ๋ ๊ทธ๋ํ : O(N^2)
1) BFS๋ฅผ ์ฌ์ฉํ๋ ๋ชฉ์ ์ ์ต๋จ๊ฒฝ๋ก๋ฅผ ๊ตฌํ ๋ (๋จ, ๋ชจ๋ ๊ฐ์ ์ ๊ฐ์ค์น๊ฐ 1์ผ๋)
2) DFS์ ์ฌ์ฉํ๋ ๋ชฉ์ ์ ์์์ ์์ ๋์ ๊น์ง ๋๋ฌํ๋ ๊ฒฝ๋ก๋ก ๋ฌด์ธ๊ฐ๋ฅผ ์ป๊ณ ์ถ์ ๋
c++ ์์
//
// 1260_bfs_dfs.cpp
// SOMA๐ฉ๐ป๐ป
//
// Created by JoSoJeong on 2021/02/13.
//
#include <vector>
#include <iostream>
#include <algorithm>
#include <stack>
#include <queue>
using namespace std;
// dfs ์ ๋ค์ด์ค๋ฉด ๋ฐฉ๋ฌธํ ๊ฒ์ผ๋ก ํ๋จ ๋ฐฉ๋ฌธ ํ๋จ ์ฌ๋ถ๊ฐ ๋ฐ๋์ ๋ค์ด๊ฐ์ผ ํ๋ค.
//recursion used
/*void dfs(int start, vector<int> graph[], bool check[]){
check [start] = true;
cout << start;
for(int i=0; i< graph[start].size(); i++){
int next = graph[start][i];
if(check[next] == false){
dfs(next, graph, check); //recursion used
}
}
}
*/
//queue used
void bfs(int start, vector<int> bgraph[], bool bcheck[]){
queue<int> q;
q.push(start);
bcheck[start] = true;
while(!q.empty()){
int tmp = q.front();
q.pop();
cout << tmp << ' ';
for(int i=0; i<bgraph[tmp].size(); i++){
// ๋ฐฉ๋ฌธํ์ง ์์๋ค๋ฉด
if(bcheck[bgraph[tmp][i]] == false){
// ํ์ ๋ฃ์ด์ฃผ๊ณ ๋ฐฉ๋ฌธํ์์ ํ์ํ๋ค.
q.push(bgraph[tmp][i]);
bcheck[bgraph[tmp][i]] = true;
}
}
}
}
//stack used
void dfs(int start, vector<int> graph[], bool check[]){
stack<int> s;
s.push(start);
check[start] = true;
cout << start<< ' ';
while(!s.empty()){
int current_node = s.top();
s.pop();
for(int i =0; i<graph[current_node].size();i++){
int next_node = graph[current_node][i];
if(check[next_node] == false){
cout <<next_node << ' ';
check[next_node] = true;
//pop ํ์ผ๋ฏ๋ก current_node ๋ฅผ ๋ฃ์ด์ฃผ์ฌ์ ํ๋ค.
s.push(current_node);
s.push(next_node);
break;
}
}
}
}
int main(){
int n, m, start;
cin >> n >> m >> start;
vector<int> graph[n+1];
vector<int> regraph[n+1];
bool check [n+1];
bool recheck [n+1];
// fill check ~ check+n index fill to check array
fill(check, check+n+1, false);
fill(recheck, recheck+n+1, false);
for (int i =0; i< m; i++){
int u,v;
cin >> u >> v;
graph[u].push_back(v);
graph[v].push_back(u);
regraph[u].push_back(v);
regraph[v].push_back(u);
}
for(int i = 1; i<=n; i++){
sort(graph[i].begin(), graph[i].end());
sort(regraph[i].begin(), regraph[i].end());
}
dfs(start, graph, check);
cout << '\n';
int restart;
restart = start;
bfs(restart, regraph, recheck);
}
'Data Structure๐งถ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์์ ์ ๋ ฌ Topological Sort (0) | 2021.06.13 |
---|---|
LCS ์ต์ฅ ๊ณตํต ๋ถ๋ถ ์์ด DP (0) | 2021.03.01 |
๊ทธ๋ํ ์ด๋ก - ์ด๋ถ ๊ทธ๋ํ (0) | 2021.02.25 |
์ ๋ ฌ - ์ ํ, ๋ฒ๋ธ, ์ฝ์ , ๋ณํฉ, ํ, ํต (0) | 2021.02.19 |
๋๊ธ