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

문제를 이해하는 것은 어렵지 않다. 인덱스를 돌면서 방문처리 해주는 간단한 문제였는데, 그래프의 탐색중 기초문제같다.

 

#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

+ Recent posts