문제링크: https://www.acmicpc.net/problem/10451
문제 해결 방법은, 기본 DFS
방문 표시를 하면서 깊이 탐색하다보니, Main 문에서 실행되는 DFS 함수의 횟수는 순열의 개수와 같다.
백준 9466번 문제와 비슷하나, 9466번이 조금 더 어렵다.
10451을 풀어봣다면, 9466번을 꼭 풀어봤으면 좋겠다.
9466번 문제링크: https://www.acmicpc.net/problem/9466
#include <iostream>
#include <cstring>
using namespace std;
int T; // Test case 저장할 변수
int N; // 순열의 크기
int nArr[1001]; // 순열을 저장 할 배열
bool bVisit[1001];
void DFS(int nStart)
{
bVisit[nStart] = true;
int next = nArr[nStart];
if(!bVisit[next])
{
DFS(next);
}
}
int main(void)
{
cin >> T;
for (int i = 0; i < T; i++)
{
int nCount = 0;
cin >> N;
memset(bVisit, false, sizeof(bVisit));
for (int j = 1; j <= N; j++)
{
cin >> nArr[j];
}
for (int j = 1; j <= N; j++)
{
if (!bVisit[j])
{
DFS(j);
nCount++;
}
}
cout << nCount << endl;
}
return 0;
}
'개발 > 백준' 카테고리의 다른 글
백준 13460번: 구슬 탈출 2 (0) | 2019.10.14 |
---|---|
백준 9466번: 텀 프로젝트 (0) | 2019.09.26 |
백준 1325번: 효율적인 해킹 (0) | 2019.09.24 |
백준 1963번: 소수 경로 (0) | 2019.09.02 |
백준 1389번: 케빈 베이컨의 6단계 법칙 (0) | 2019.09.01 |