개발/알고리즘

10451_순열 싸이클

송디 2020. 12. 1. 12:52

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나 BFS로 풀 수 있다. 흔히 영역을 구하는 문제와 비슷한 것 같다. 오늘은 간단하게 코드만 올리겠다. 

 

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
32
33
34
35
36
37
38
39
40
#include<iostream>
#include<vector>
#include<cstring>
 
using namespace std;
int area[1001];
 
void dfs(int p, int flag, vector<int> g[1001]){
    if(area[p]) return;
    area[p] = flag;
    for(int i = 0; i < g[p].size();i++){
        dfs(g[p][i], flag, g);
    }
}
int main(void){
    ios::sync_with_stdio(false);
    cin.tie(NULL);
 
    int t;
 
    cin >> t;
    while(t--){
        int n, v, flag;
        vector<int> g[1001];
 
        cin >> n;
        memset(area, 0sizeof(area));
        for(int i = 1; i <= n; i++){
            cin >> v; g[i].push_back(v);
        }
        flag = 1;
        for(int i = 1; i <= n; i++){
            if(area[i]) continue;
            dfs(i, flag, g);
            flag++;
        }
        cout << flag - 1 << "\n";
    }
}
 
cs
728x90

'개발 > 알고리즘' 카테고리의 다른 글

1645_랜선 자르기  (0) 2020.12.08
1167_트리의 지름  (0) 2020.12.07
1707_이분그래프  (0) 2020.11.30
1107_리모컨  (0) 2020.11.29
11724_연결요소의 개수  (0) 2020.11.27