한줄 후기 : 순열 싸이클이 뭔지 몰라서 고민
https://www.acmicpc.net/problem/10451
그냥 받아서 모든 정점 dfs 돌리고 체크 되어있지 않으면 싸이클 + 1 해주면 됨
#include <iostream>
using namespace std;
int a[1003];
bool b[1003] = {};
void check(int n);
int main() {
int t;
cin >> t;
while (t--) {
int n;
int cnt = 0;
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> a[i];
}
for (int i = 1; i <= n; i++) {
if (b[i] == false) {
check(i);
cnt++;
}
}
cout << cnt << endl;
for (int i = 1; i <= n; i++) {
b[i] = false;
}
}
return 0;
}
void check(int n) {
b[n] = true;
if (b[a[n]] == false) check(a[n]);
else return;
}
'DEV > PS' 카테고리의 다른 글
[1003] 피보나치 함수, c++ (0) | 2019.07.26 |
---|---|
[5567] 결혼식, C++ (0) | 2019.07.24 |
[7576] 토마토, C++ (0) | 2019.07.24 |
[2606] 바이러스, C++ (0) | 2019.07.24 |
[11724] 연결 요소의 개수, C/C++ (0) | 2019.07.24 |