๋ค๋ฅธ ๋ธ๋ก๊ทธ์์ dfs์ bfs๋ฅผ ์ค๋ช ํ๋ ๊ธ์ด ๋ง์ง๋ง dfs๋ฅผ ์ฌ๊ท๋ก๋ง ๊ตฌํํ๋ ๊ฒฝ์ฐ๊ฐ ๋๋ถ๋ถ์ ๋๋ค. ์ฌ๊ท์ ์ฌ์ฉ์ ์คํ์ ์ฌ์ฉ๊ณผ ๋์ผํ์ฌ ๊ทธ๋ ๊ฒ ํด๋ ๋์ง๋ง, ์คํ๋ง์ผ๋ก ๊ตฌํํ๋ ๋ฐฉ๋ฒ๋ ํฌ์คํ ํ๊ณ ์ ํฉ๋๋ค. (์ฃผ์ ์ฐธ๊ณ )
#include<iostream>
#include<vector>
#include<queue>
#include<cstring>
#include<stack>
using namespace std;
int N, M, V;
vector<int> v[1001];
bool check[1001] = { false };
void dfs(int s) {
check[s] = true;
cout << s << " ";
vector<int> vec = v[s];
for (int i = 0; i < vec.size(); i++) {
if (!check[vec[i]]) {
dfs(vec[i]);
}
}
}
/*
void dfs_stack(int s) {
stack<int> stack;
check[s] = true;
stack.push(s);
cout << s << " ";
while (!stack.empty()) {
int n = stack.top();
vector<int> vec = v[n];
for (int i = 0; i < vec.size(); i++) {
if (!check[vec[i]]) {
check[vec[i]] = true;
cout << vec[i] << " ";
stack.push(vec[i]);
break;
}
else if (i == vec.size() - 1) {
stack.pop();
}
}
}
}
*/
void bfs(int s) {
queue<int> q;
check[s] = true;
q.push(s);
cout << s << " ";
while (!q.empty()) {
int n = q.front();
q.pop();
vector<int> vec = v[n];
for (int i = 0; i < vec.size(); i++) {
if (!check[vec[i]]) {
check[vec[i]] = true;
cout << vec[i] << " ";
q.push(vec[i]);
}
}
}
}
int main(void) {
int a, b;
cin >> N >> M >> V;
/*using list*/
for (int i = 0; i < M; i++) {
cin >> a >> b;
v[b].push_back(a);
v[a].push_back(b);
}
dfs(V);
cout << endl;
memset(check, false, sizeof(check));
bfs(V);
return 0;
}
'์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ ๋ฐฑ์ค 11051] ์ดํญ๊ณ์ 2 with python (0) | 2021.06.09 |
---|---|
ํฐ ์์ ๋ง์ (0) | 2021.06.09 |
10816 ์ซ์ ์นด๋ 2 (0) | 2020.08.05 |
1051๋ฒ: ์ซ์ ์ ์ฌ๊ฐํ (0) | 2020.08.05 |
๋ฐฑ์ค 1012 ์ ๊ธฐ๋ ๋ฐฐ์ถ (์๋ฐ) (0) | 2020.07.27 |