반응형
난이도: Silver 2
번호: 11724
알고리즘 분류: 그래프 이론, 그래프 탐색, 깊이 우선 탐색, 너비 우선 탐색
언어: C++
C++
DFS
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
int N, M, cnt = 0;
bool visited[1001];
vector<int> V[1001];
queue<int> Q;
void DFS(int start)
{
visited[start] = true;
for (int j = 0; j < V[start].size(); j++)
if (!visited[V[start][j]])
DFS(V[start][j]);
}
int main(void)
{
cin.tie(0)->ios::sync_with_stdio(0);
cout.tie(0);
// node, path
cin >> N >> M;
for (int i = 0; i < M; i++)
{
int a, b;
cin >> a >> b;
V[a].push_back(b);
V[b].push_back(a);
}
for (int i = 1; i <= N; i++)
if (visited[i] == false)
{
DFS(i);
cnt++;
}
cout << cnt;
}
C++
BFS
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
int N, M, cnt = 0;
bool visited[1001];
vector<int> V[1001];
queue<int> Q;
void BFS(int start)
{
visited[start] = true;
Q.push(start);
while (!Q.empty())
{
int cur = Q.front();
Q.pop();
for (int j = 0; j < V[cur].size(); j++)
if (!visited[V[cur][j]])
{
visited[V[cur][j]] = true;
Q.push(V[cur][j]);
}
}
}
int main(void)
{
cin.tie(0)->ios::sync_with_stdio(0);
cout.tie(0);
// node, path
cin >> N >> M;
for (int i = 0; i < M; i++)
{
int a, b;
cin >> a >> b;
V[a].push_back(b);
V[b].push_back(a);
}
for (int i = 1; i <= N; i++)
if (visited[i] == false)
{
BFS(i);
cnt++;
}
cout << cnt;
}
반응형
'Algorithm > BOJ' 카테고리의 다른 글
[BOJ 13565] 침투 C++ (0) | 2023.02.25 |
---|---|
[BOJ 11234] 양 한마리... 양 두마리... C++ (0) | 2023.02.22 |
[BOJ 4963] 섬의 개수 C++ (0) | 2023.02.09 |
[BOJ 1012] 유기농 배추 C++ (0) | 2023.02.08 |
[BOJ 2606] S3 바이러스 C++ (0) | 2023.02.07 |