728x90
🅰️문제주소 : https://www.acmicpc.net/problem/1260
🚩문제
🪡풀이
- DFS와 BFS의 기본적인 구현. 탐색이 끊긴다던가 특정 depth의 값을 구하는 것이 아니므로 특별한 조건 없이 구현하면 된다.
주의할 점은 방문할 수 있는 정점이 여러개면 번호가 작은 것부터 방문하게 해야 한다는 것인데 이는 정렬을 통해 다른 조건을 줄 필요 없이 간단하게 해결된다.
☕코드는 아래 숨김
더보기
#include <iostream>
#include <vector>
#include <string>
#include <queue>
#include <algorithm>
std::vector<bool> visited;
std::vector<std::vector<int>> map;
std::string result;
int N, M;
void DFS(int num) {
std::cout << num << " ";
visited[num] = true;
for (int i = 0; i < map[num].size(); ++i) {
if (visited[map[num][i]] == false)
DFS(map[num][i]);
}
return;
}
void BFS(int num) {
std::queue<int> myQ;
myQ.push(num);
visited[num] = true;
while (!myQ.empty()) {
int now_node = myQ.front();
myQ.pop();
std::cout << now_node << ' ';
for (int i : map[now_node]) {
if (visited[i] == false) {
visited[i] = true;
myQ.push(i);
}
}
}
}
int main()
{
std::ios::sync_with_stdio(false);
std::cin.tie(NULL);
std::cout.tie(NULL);
int V;
std::cin >> N >> M >> V;
visited.resize(N+1, false);
map.resize(N+1);
int f, b;
for (int i = 1; i <= M; ++i) {
std::cin >> f >> b;
map[f].push_back(b);
map[b].push_back(f);
}
for (int i = 1; i <= N; ++i) {
std::sort(map[i].begin(), map[i].end());
}
DFS(V);
std::cout << "\n";
result = "";
visited.resize(0);
visited.resize(N+1, false);
BFS(V);
}
💡알게 된 것
- BFS에 대해 이론적으로만 알고 있었으나 실제 C++에서 Queue를 사용하여 구현해봄.
- 이차원벡터의 sort 사용해 봄
728x90
'운동하는 개발자 > 알고리즘, 코딩테스트' 카테고리의 다른 글
Beakjoon] 트리의 지름 구하기 (백준 1167 코테) - 탐색 (0) | 2023.12.09 |
---|---|
Beakjoon] 미로 탐색 (백준 2178 코테) - 탐색 (1) | 2023.12.04 |
Beakjoon] 연결 요소의 개수 (백준 11724 코테) - 탐색 (0) | 2023.11.28 |
Beakjoon] 수 정렬하기 3 (백준 10989 코테) - 정렬 (1) | 2023.11.27 |
Beakjoon] 버블 소트 2 (백준 1517코테) - 정렬 (0) | 2023.11.25 |