๐ป
[๋ฐฑ์ค] DFS์BFS - 1260.DFS์ BFS ๋ณธ๋ฌธ
๋ฌธ์
๊ทธ๋ํ๋ฅผ DFS๋ก ํ์ํ ๊ฒฐ๊ณผ์ BFS๋ก ํ์ํ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค. ๋จ, ๋ฐฉ๋ฌธํ ์ ์๋ ์ ์ ์ด ์ฌ๋ฌ ๊ฐ์ธ ๊ฒฝ์ฐ์๋ ์ ์ ๋ฒํธ๊ฐ ์์ ๊ฒ์ ๋จผ์ ๋ฐฉ๋ฌธํ๊ณ , ๋ ์ด์ ๋ฐฉ๋ฌธํ ์ ์๋ ์ ์ด ์๋ ๊ฒฝ์ฐ ์ข ๋ฃํ๋ค. ์ ์ ๋ฒํธ๋ 1๋ฒ๋ถํฐ N๋ฒ๊น์ง์ด๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ์ ์ ์ ๊ฐ์ N(1 ≤ N ≤ 1,000), ๊ฐ์ ์ ๊ฐ์ M(1 ≤ M ≤ 10,000), ํ์์ ์์ํ ์ ์ ์ ๋ฒํธ V๊ฐ ์ฃผ์ด์ง๋ค. ๋ค์ M๊ฐ์ ์ค์๋ ๊ฐ์ ์ด ์ฐ๊ฒฐํ๋ ๋ ์ ์ ์ ๋ฒํธ๊ฐ ์ฃผ์ด์ง๋ค. ์ด๋ค ๋ ์ ์ ์ฌ์ด์ ์ฌ๋ฌ ๊ฐ์ ๊ฐ์ ์ด ์์ ์ ์๋ค. ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง๋ ๊ฐ์ ์ ์๋ฐฉํฅ์ด๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ DFS๋ฅผ ์ํํ ๊ฒฐ๊ณผ๋ฅผ, ๊ทธ ๋ค์ ์ค์๋ BFS๋ฅผ ์ํํ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ค. V๋ถํฐ ๋ฐฉ๋ฌธ๋ ์ ์ ์์๋๋ก ์ถ๋ ฅํ๋ฉด ๋๋ค.
์์ ์ ๋ ฅ1
4 5 1
1 2
1 3
1 4
2 4
3 4
์์ ์ถ๋ ฅ1
1 2 4 3
1 2 3 4
์์ ์ ๋ ฅ2
5 5 3
5 4
5 2
1 2
3 4
3 1
์์ ์ถ๋ ฅ2
3 1 2 5 4
3 1 4 2 5
์์ ์ ๋ ฅ3
1000 1 1000
999 1000
์์ ์ถ๋ ฅ3
1000 999
1000 999
์๊ฐ
memset์ ์ด๊ธฐํ ํ ๋ ์ ์ฉํ๊ฒ ์ฐ์ธ๋ค. dfs๋ฅผ ์คํํ๋ฉด์ visitied[]๊ฐ ๋ค true๋ก ๋์ด์๋ ๊ฒ์ ๋ค์ false๋ก ์ด๊ธฐํํ๊ธฐ ์ํด ์ฌ์ฉํ์๋ค. memset์ cstring์ ์ ์๋์ด์๋ค. ๊ทธ๋ฆฌ๊ณ ์ฐ๊ฒฐ๋ ๋ ธ๋ ์ค ์ซ์๊ฐ ์์ ์์๋ถํฐ ๋ฐฉ๋ฌธํด์ผํ๋ฏ๋ก sort()๋ฅผ ์ด์ฉํด์ ์ ๋ ฌํด์ฃผ์๋ค. sort๋ algorithm์ ์ ์๋์ด์๋ค.
์์ฑํ ์ฝ๋
#include <iostream>
#include <vector>
#include <queue>
#include <cstring>
#include <algorithm>
using namespace std;
int n,m,v;
vector<int> graph[1001];
queue<int> q;
bool visited[1001];
void dfs(int node){
visited[node] = true;
cout << node << ' ';
for(int i=0; i<graph[node].size(); i++){
int next = graph[node][i];
if(!visited[next]){
dfs(next);
}
}
}
void bfs(int start){
queue<int> q;
memset(visited,false,sizeof(visited));
visited[start] = true;
q.push(start);
while(!q.empty()){
int node = q.front();
q.pop();
cout << node << ' ';
for(int i=0; i<graph[node].size(); i++){
int next = graph[node][i];
if(!visited[next]){
visited[next] = true;
q.push(next);
}
}
}
}
int main(int argc, const char * argv[]) {
// insert code here...
ios_base::sync_with_stdio(false);
cin.tie(0);
cin >> n >> m >> v;
for(int i=0; i<m; i++){
int a, b;
cin >> a >> b;
graph[a].push_back(b);
graph[b].push_back(a);
}
for(int i=0; i<=n; i++){
sort(graph[i].begin(), graph[i].end());
}
dfs(v);
cout << "\n";
bfs(v);
return 0;
}
'์๊ณ ๋ฆฌ์ฆ > ๋ฌธ์ ํ์ด Baekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] ๋ธ๋ฃจํธํฌ์ค - 1018. ์ฒด์คํ ๋ค์ ์น ํ๊ธฐ (0) | 2020.03.01 |
---|---|
[๋ฐฑ์ค] DFS์BFS - 11403. ๊ฒฝ๋ก ์ฐพ๊ธฐ (0) | 2020.03.01 |
[๋ฐฑ์ค] DFS์BFS - 10026. ์ ๋ก์์ฝ (0) | 2020.02.28 |
[๋ฐฑ์ค] ๊ทธ๋ฆฌ๋์๊ณ ๋ฆฌ์ฆ - 1120. ๋ฌธ์์ด (0) | 2020.02.28 |
[๋ฐฑ์ค] ๊ทธ๋ฆฌ๋์๊ณ ๋ฆฌ์ฆ - 12866. ํ๋ฒํ ๋ฐฐ๋ญ (0) | 2020.02.27 |