[BOJ] 백준 11724 연결 요소의 개수
이 문제 역시 같은 영역 색칠하기와 같은 문제 인것 같습니다.
이 문제를 풀 때 처음엔 BFS로 풀었습니다. 큐에 요소들을 집어넣고, 큐가 비워질 때 까지 탐색을 계속 하는 것이죠. 하지만 문제를 풀고 다른 사람들의 소스코드를 봤더니, DFS를 사용한 사람이 더 많았습니다.
제가 생각한 이유는 '글쎄' 입니다. 두가지 방식이 있지만, 생각나는대로, 편한대로 풀면 되는 문제 같습니다.
소스코드 :
1. BFS로 구현
// BFS로 구현 #include#include #include using namespace std; vector v[1001]; bool visited[1001] = { false, }; queue q; void BFS(int idx) { q.push(idx); while (!q.empty()) { q.pop(); for (int i = 0; i < v[idx].size(); i++) { if (visited[v[idx][i]] == false) { q.push(v[idx][i]); visited[v[idx][i]] = true; } } if (!q.empty()) { idx = q.front(); } } } int main() { int N, M; cin >> N >> M; cin.ignore(); for (int i = 0; i < M; i++) { int v1, v2; cin >> v1 >> v2; cin.ignore(); v[v1].push_back(v2); v[v2].push_back(v1); } int color = 0; for (int i = 1; i <= N; i++) { if (!visited[i]) { visited[i] = true; BFS(i); color++; } } cout << color << endl; }
2. DFS로 구현
#include#include using namespace std; vector v[1001]; bool visited[1001] = { false, }; void DFS(int idx) { for(int i=0;i > N >> M; cin.ignore(); for (int i = 0; i < M; i++) { int v1, v2; cin >> v1 >> v2; cin.ignore(); v[v1].push_back(v2); v[v2].push_back(v1); } int color = 0; for (int i = 1; i <= N; i++) { if (!visited[i]) { visited[i] = true; DFS(i); color++; } } cout << color << endl; }
댓글
댓글 쓰기