티스토리 뷰

https://www.acmicpc.net/problem/10451

 

10451번: 순열 사이클

1부터 N까지 정수 N개로 이루어진 순열을 나타내는 방법은 여러 가지가 있다. 예를 들어, 8개의 수로 이루어진 순열 (3, 2, 7, 8, 1, 4, 5, 6)을 배열을 이용해 표현하면 \(\begin{pmatrix} 1 & 2 &3&4&5&6&7&8 \\  3

www.acmicpc.net

DFS를 이용해 풀이하였습니다


C++ 소스 코드

#include <iostream>
#define MAX 1001
using namespace std;
int adj[MAX];
bool visit[MAX];
void dfs(int x){
    if(visit[x]) return; // 이미 방문한 정점을 또 방문하면 cycle
    visit[x] = true;
    dfs(adj[x]);
}
int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);
    int tc,n,ans;
    cin >> tc;
    while(tc--){
        cin >> n;
        ans = 0;
        fill(&visit[0],&visit[n]+1,0);
        for(int i=1;i<=n;i++){
            cin >> adj[i];
        }
        for(int i=1;i<=n;i++){
            if(!visit[i]){
                dfs(i);
                ans++;
            }
        }
        cout << ans << '\n';
    }
    return 0;
}
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/10   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함