반응형
dfs와 bfs의 원리를 터득하기 위해 올린다.
그렇게 어렵지 않은 문제이니 평소에 dfs나 bfs가 애매한 감이 있다면 풀어보길 권한다.
#include <iostream>
#include <queue>
using namespace std;
int map[1001][1001];
int visited1[1001];
int visited2[1001];
int n, m, v;
queue<int> q;
void bfs() {
while (!q.empty()) {
int v = q.front();
cout << v << " ";
q.pop();
for (int j = 1; j <= n; j++) {
if (map[v][j] && visited1[j] == 0) {
visited1[j] = 1;
q.push(j);
}
}
}
}
void dfs(int v) {
cout << v << " ";
for (int j = 1; j <= n; j++) {
if (map[v][j]&&visited2[j]==0) {
visited2[j] = 1;
dfs(j);
}
}
}
int main() {
cin >> n >> m >> v;
for (int i = 0; i < m; i++) {
int a, b; cin >> a >> b;
map[a][b]=1;
map[b][a]=1;
}
visited2[v] = 1;
dfs(v);
cout << endl;
visited1[v] = 1;
q.push(v);
bfs();
}
반응형
'백준 > DFS BFS' 카테고리의 다른 글
[백준 2667번 / C++] 단지번호붙이기 (0) | 2022.01.24 |
---|---|
[백준 10026번 / C++] 적록색약 (0) | 2022.01.24 |
[백준 7576 / C++] 토마토 (0) | 2022.01.20 |
[백준 2178번 / C++] 미로 탐색 (0) | 2022.01.17 |
[백준 2468번 / C++] 안전 영역 (0) | 2022.01.14 |
댓글