728x90
문제주소 : https://www.acmicpc.net/problem/11724
문제
풀이
- 기본적인 DFS 문제로 그래프를 그리고 재귀함수로 풀어내면 됨
코드는 아래 숨김
더보기
#include <iostream>
#include <vector>
std::vector<std::vector<int>> graph_map;
std::vector<bool> visited;
void DFS(int v) {
if (visited[v] == true) return;
visited[v] = true;
for (int i = 0; i < graph_map[v].size(); ++i) {
if (visited[graph_map[v][i]] == false) {
DFS(graph_map[v][i]);
}
}
}
int main()
{
std::ios::sync_with_stdio(false);
std::cin.tie(NULL);
std::cout.tie(NULL);
int n, m;
std::cin >> n >> m;
graph_map.resize(n + 1);
visited = std::vector<bool>(n+1, false);
for (int i = 0; i < m; ++i) {
int first, second;
std::cin >> first >> second;
graph_map[first].push_back(second);
graph_map[second].push_back(first);
}
int count = 0;
for (int i = 1; i < n+1; ++i) {
//if (std::find(visited.begin(), visited.end(), false) != visited.end()) {
if(visited[i] == false){
++count;
DFS(i);
}
}
std::cout << count;
}
알게 된 것 :
- DFS에서 이차원 벡터를 사용하여 그래프를 그리는 법, 이차원 벡터 초기화
- 방문여부를 별도의 배열에 저장해두는 것
- 파이썬때는 리스트 슬라이스를 합치는 식으로 했던 거 같기도 한데.. 여튼 이게 더 이해가 쉽다
728x90
'운동하는 개발자 > 알고리즘, 코딩테스트' 카테고리의 다른 글
Beakjoon] 미로 탐색 (백준 2178 코테) - 탐색 (1) | 2023.12.04 |
---|---|
Beakjoon] DFS와 BFS (백준 1260 코테) - 탐색 (1) | 2023.12.04 |
Beakjoon] 수 정렬하기 3 (백준 10989 코테) - 정렬 (1) | 2023.11.27 |
Beakjoon] 버블 소트 2 (백준 1517코테) - 정렬 (0) | 2023.11.25 |
실무자가 경험한 코딩테스트(알고리즘) 책 추천 + 스토리.. (2) | 2023.11.09 |