[๋ฐฑ์ค] 1260๋ฒ - DFS์ BFS (C++)
๋ฌธ์
๊ทธ๋ํ๋ฅผ 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
ํ์ด๊ณผ์
DFS์ BFS์ ๊ฐ๋ ์ ์๋ฒฝํ๊ฒ ์ดํดํด์ผ ํ ์ ์๋ ๋ฌธ์ ์ธ๊ฑฐ๊ฐ๋ค.
DFS๋ ์ฝ๋์์ ๋ณด์ด๋ ๋ชจ์ต์ฒ๋ผ ์ ์ ์ ์ก๊ณ ๊ทธ ์ ์ ์ ์ฌ๊ท๋ฅผ ํตํด ํ๊ณ ํ๊ณ ๋ค์ด๊ฐ์ ๋๊น์ง ๋ค์ด๊ฐ์ ๋์ฐฉํด์ผ๋ง ๋ค๋ฅธ ์ ์ ์ ๊ฑด๋๋ ๋ฐฉ์์ด๊ณ ,
BFS๋ ์ ์ ์ ์ถ์ธ queue๋ฅผ ํตํด์ ๋ฐ๋ณต๋ฌธ์ ๋๋ ๊ธฐ์ค์ queue๋ก ์ก๊ณ ๋๋ค. ๊ทธ๋ ๊ฒ ๋์ด ์ฌ๊ท์ ๋ค๋ฅด๊ฒ i ๋ถํฐ n ๊น์ง ๊ฐ์ ์ ์ฐ๊ฒฐ๋ ๋ชจ๋ ๊ฐ์ ๋ค์ ๋ค๋ ธ๋ค๊ฐ ๊ฐ ์ ์๊ฒ ๋๋ค.
code
#include <iostream>
#include <vector>
#include <queue>
int a[1001][1001];
int visit[1001] = {0,};
void bfs(int v, int n)
{
std::queue<int> q;
int visit[1001] = {0,};
q.push(v);
visit[v] = true;
std::cout << v << " ";
while (!q.empty()) {
int temp = q.front();
q.pop();
for(int j = 1; j <= n; j++) {
if (a[j][temp] && !visit[j]) {
std::cout << j << " ";
q.push(j);
visit[j] = true;
}
}
}
}
void dfs(int v, int n)
{
visit[v] = true;
std::cout << v << " ";
for(int i = 1; i <= n; i++) {
if (a[v][i] && !visit[i]) {
dfs(i, n);
}
}
}
int main(void)
{
int n, m, v;
int y, x;
std::cin >> n >> m >> v;
for(int i = 0; i < m; i++) {
std::cin >> y >> x;
a[y][x] = 1;
a[x][y] = 1;
}
dfs(v, n);
std::cout << "\n";
bfs(v, n);
return (0);
}
ํ๊ธฐ
bfs๋ dfs๋ ๊ฐ๋ ๋ง ์ก์๋๋ฉด ํ์คํ ํ์ฉ๋๊ฐ ์ข์์ ์์๋๋ฉด ๋ค๋ฐฉ๋ฉด์ผ๋ก ์ธ ์ ์์ด์ ํ์คํ๊ฒ ์ง์ผ๋ฉด์ ๋์ด๊ฐ๋ ๋๋์ผ๋ก ํ์์๋ค.