반응형
문제 출처
백준 온라인 저지
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 알고리즘을 사용해서, DFS 함수를 호출할 때마다 cnt값을 증가시키며 사이클의 개수를 구한다.
코드
#include <cstring>
#include <iostream>
#include <vector>
using namespace std;
const int MAX = 1001;
int T, N, result, cnt = 0;
int graph[MAX];
bool visited[MAX];
void cycle(int start) {
visited[start] = true;
if (!visited[graph[start]]) {
cycle(graph[start]);
}
}
int main() {
cin >> T;
for (int i = 0; i < T; i++) {
cnt = 0;
cin >> N;
for (int j = 1; j <= N; j++) {
cin >> graph[j];
}
for (int j = 1; j <= N; j++) {
if (!visited[j]) {
cycle(j);
cnt++;
}
}
cout << cnt << "\n";
memset(visited, false, sizeof(visited));
}
}
반응형
'알고리즘 > 백준' 카테고리의 다른 글
[Java] BOJ 1238 파티 (0) | 2022.05.30 |
---|---|
[C++] BOJ 2331 반복수열 (0) | 2022.01.24 |
[C++] BOJ 2004 조합 0의 개수 (0) | 2022.01.24 |
[C++] BOJ 11653 소인수분해 (0) | 2022.01.24 |
[C++] BOJ 6588 골드바흐의 추측 (0) | 2022.01.24 |