코딩 연습문제

백준 10451: 순열 사이클 / dfs

집빈지노 2019. 7. 18. 17:32
#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 배열을 초기화 해주는걸 잊지 않는다.