장성호's
장성호's blog
장성호's
  • 분류 전체보기
    • 알고리즘
      • 백준
      • 이론
    • WEB
      • Spring 인강
      • 네트워크
    • 개인 프로젝트
      • 쇼핑몰 만들기

블로그 메뉴

  • 홈
  • 깃허브
전체 방문자
오늘
어제
반응형
hELLO · Designed By 정상우.
장성호's

장성호's blog

[C++] BOJ 10451 순열사이클
알고리즘/백준

[C++] BOJ 10451 순열사이클

2022. 1. 24. 19:08
반응형

 

 

문제 출처

백준 온라인 저지

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
    '알고리즘/백준' 카테고리의 다른 글
    • [Java] BOJ 1238 파티
    • [C++] BOJ 2331 반복수열
    • [C++] BOJ 2004 조합 0의 개수
    • [C++] BOJ 11653 소인수분해
    장성호's
    장성호's
    장성호's 개발 공부 블로그

    티스토리툴바