728x90
반응형
문제보기
#include <bits/stdc++.h>
using namespace std;
int t, n;
vector<int> graph[1001];
bool visited[1001];
int result = 0;
void dfs(int x){
visited[x] = true;
for(int i=0; i<graph[x].size(); i++){
int y = graph[x][i];
if(!visited[y]) dfs(y);
}
}
int main(void) {
cin >> t; // 테스트케이스 수 입력
for(int j=0; j<t; j++){
cin >> n; // 순열의 수 입력
for(int i=1; i<=n; i++){
int x;
cin >> x;
graph[i].push_back(x); // i와 순열i의 간선 잇기
}
for(int i=1; i<=n; i++){
if(!visited[i]){
dfs(i); // dfs 수행
result++; // 사이클 생길 때마다 +1
}
}
cout << result << endl;
result = 0;
for(int i=1; i<=n; i++){ // visited와 graph 초기화
visited[i] = false;
graph[i].clear();
}
}
return 0;
}
728x90
반응형
'알고리즘' 카테고리의 다른 글
[백준/구현/C++] 2331번 반복수열 (0) | 2022.12.29 |
---|---|
[백준/DP/C++] 11055번 가장 큰 증가 부분 수열 (0) | 2022.12.29 |
[백준/ DFS&BFS/ C++] 11724번 연결 요소의 개수 (0) | 2022.12.29 |
[백준/ DFS&BFS/ C++] 1260번 DFS와 BFS (0) | 2022.12.28 |
[이코테/ DFS&BFS/ C++] 미로탈출 (0) | 2022.12.28 |