https://www.acmicpc.net/problem/11724
풀이법
1) DFS를 활용하면 쉽게 풀 수 있는 문제이다
2) visit 배열을 두어 한 번 방문한 곳은 다시 방문 안하는 것을 활용하면 더 쉽게 풀 수 있다.
3) 연결된 Node가 총 몇 덩이인지 파악하기 위해 cnt 변수를 두어 개수를 셀 수 있게 하였다.
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
#include <stack>
#include <cstring>
#include <queue>
using namespace std;
int n, m;
int arr[1001][1001];
bool visit[1001];
int cnt = 0;
void dfs(int i)
{
stack<int> st;
st.push(i);
visit[i] = true;
while (!st.empty())
{
int now = st.top();
st.pop();
for (int j = 1; j <= n; j++)
{
if (visit[j])
continue;
if (!visit[j] && arr[now][j] == 1)
{
visit[j] = true;
st.push(j);
}
}
}
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cin >> n >> m;
for (int i = 0; i < m; i++)
{
int a, b;
cin >> a >> b;
arr[a][b] = 1;
arr[b][a] = 1;
}
for (int i = 1; i <= n; i++)
{
if (visit[i])
continue;
else
{
cnt++;
dfs(i);
}
}
cout << cnt;
}
간단하게 구현이 가능한 문제였으며, Sliver 2치고는 쉬웠다고 생각한다.
직접 코드를 보며 이해가 안되는 부분을 확인한다면, 이 글을 읽는 모두가 이해할 수 있을 것이라 생각한다.
'Coding_Test_C++' 카테고리의 다른 글
BaekJoon 10451번: 순열 사이클(C++) (0) | 2021.06.06 |
---|---|
BaekJoon 1389번: 케빈 베이컨의 6단계 법칙(C++) (0) | 2021.06.04 |
LeetCode 1669번: Merge In Between Linked Lists(Python3) (0) | 2021.05.29 |
BaekJoon 2644번: 촌수계산(C++/DFS/BFS) (0) | 2021.05.29 |
BaekJoon 7562번: 나이트의 이동(C++) (0) | 2021.05.23 |