#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <algorithm>
#include <queue>
#include <cstring>
#include <vector>
using namespace std;
//순열 사이클
int arr[1001];
bool check[1001];
void cycledfs(int node) {
check[node] = true;
int next = arr[node];
if (check[next] == false) {
cycledfs(next);
}
else return;
}
int main()
{
int t; cin >> t;
while (t--) {
int n; cin >> n;
for (int i = 1; i <= n; i++) {
scanf("%d", arr+i);
}
int count = 0;
for (int i = 1; i <= n; i++) {
if (check[i] == false) {
cycledfs(i);
count++;
}
}
cout << count<< endl;
memset(arr + 1, 0, n * sizeof(int));
memset(check + 1, 0, n * sizeof(bool));
}
return 0;
}
memset으로 check 배열을 초기화 해주는걸 잊지 않는다.
'코딩 연습문제' 카테고리의 다른 글
백준2667번: 단지번호 붙이기 / dfs & bfs (0) | 2019.07.18 |
---|---|
백준 4963번: 섬의 개수 / dfs와 단위좌표를 이용한 풀이 (0) | 2019.07.18 |
백준 2178번: 미로 탐색 / bfs 구현 (0) | 2019.07.18 |