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
문제를 이해하는 것은 어렵지 않다. 인덱스를 돌면서 방문처리 해주는 간단한 문제였는데, 그래프의 탐색중 기초문제같다.
#include <iostream>
using namespace std;
int ar[1001], tc, n, cnt;
bool vis[1001];
void dfs(int cur) {
if (vis[cur]) return;
vis[cur] = true;
dfs(ar[cur]);
}
int main() {
cin >> tc;
while (tc--) {
cin >> n;
for (int i = 1; i <= n; i++) cin >> ar[i];
fill(vis, vis + 1001, false); //돌 때마다 초기화
for (int i = 1; i <= n; i++) {
if (!vis[i]) { //방문하지 않았다면
dfs(i); cnt++; //한 사이클이 다 될때까지 dfs
}
}
cout << cnt << '\n'; cnt = 0;
}
}
'BOJ' 카테고리의 다른 글
백준 4963 섬의 개수 (0) | 2020.09.09 |
---|---|
백준 2331 반복수열 (0) | 2020.09.08 |
백준 13305 주유소 (0) | 2020.09.07 |
백준 2981 검문 (0) | 2020.09.07 |
백준 12865 평범한 배낭 (0) | 2020.09.07 |