문제 링크입니다: https://www.acmicpc.net/problem/10451
간단한 DFS(Depth First Search) 알고리즘 문제였습니다.
flood fill 유형 문제에서 컴포넌트 개수 세듯이 하면 AC 받을 수 있습니다.
#include <iostream>
#include <cstring>
using namespace std;
const int MAX = 1000 + 1;
int N;
int arr[MAX];
bool visited[MAX];
void DFS(int node)
{
visited[node] = true;
if (!visited[arr[node]])
DFS(arr[node]);
}
int main(void)
{
ios_base::sync_with_stdio(0);
cin.tie(0);
int T;
cin >> T;
for (int t = 0;t < T; t++)
{
memset(visited, false, sizeof(visited));
cin >> N;
for (int i = 1; i <= N; i++)
cin >> arr[i];
int cnt = 0;
for (int i = 1; i <= N; i++)
//컴포넌트 개수
if (!visited[i])
{
DFS(i);
cnt++;
}
cout << cnt << "\n";
}
return 0;
}
개발환경:Visual Studio 2017
지적, 조언, 질문 환영입니다! 댓글 남겨주세요~
'알고리즘 > BOJ' 카테고리의 다른 글
백준 2331번 반복수열 (5) | 2018.11.02 |
---|---|
백준 2038번 골롱 수열 (0) | 2018.11.02 |
백준 2463번 비용 (0) | 2018.11.02 |
백준 5532번 방학 숙제 (0) | 2018.11.01 |
백준 12790번 Mini Fantasy War (0) | 2018.11.01 |