백준 10974 모든 순열
본문 바로가기
알고리즘 모음집/알고리즘 (Algorithm)

백준 10974 모든 순열

by KyeongMin 2019. 7. 23.
728x90
반응형

Íhttps://www.acmicpc.net/problem/10974

 

10974번: 모든 순열

N이 주어졌을 때, 1부터 N까지의 수로 이루어진 순열을 사전순으로 출력하는 프로그램을 작성하시오.

www.acmicpc.net

모든 순열은 정말 설명할것이 하나도 없는게 지금까지 백트래킹을 같이 해오셨다면 바로 풀수 있는 문제 입니다.

여기서 원하는 조건은 

1 2 3 인경우

이런식으로 나오게 하는것으로 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include<stdio.h>
int N;
int num[9];
int chk[9];
void dfs(int idx) {
    if (idx == N+1) {
        for (int y = 1; y <= N; y++) {
            printf("%d ", num[y]);
        }
        printf("\n");
        return;
    }
    else {
        for (int i = 1; i <= N; i++) {
            if (num[idx] == 0&&chk[i]==0) {
                chk[i] = 1;
                num[idx] = i;
                dfs(idx + 1);
                num[idx] = 0;
                chk[i] = 0;
            }
        }
    }
}
int main(void)
{
    scanf("%d"&N);
    dfs(1);
    return 0;
}
 
 
위와 같이 구현을 해도 좋고
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include<stdio.h>
#include<algorithm>
using namespace std;
int N;
int num[30];
int chk[30];
void dfs() {
    for (int i = 0; i < N; i++)
    {
        printf("%d ", num[i]);
    }
    printf("\n");
    while (next_permutation(num, num + N))
    {
        for (int i = 0; i < N; i++)
        {
            printf("%d ", num[i]);
 
        }
        printf("\n");
    }
}
int main(void)
{
    scanf("%d"&N);
 
    for (int i = 1 i <= N; i++) {
        num[i] = i;
    }
    dfs();
    return 0;
}
 
 

next_permutation 함수를 이용하여 이런식으로도 구현이 가능합니다.

간단하고 가장 기본이 되는 소스이므로 잘 알아두세요

 

728x90
반응형

'알고리즘 모음집 > 알고리즘 (Algorithm)' 카테고리의 다른 글

백준 10972 다음 순열  (0) 2019.07.23
백준 1525 퍼즐  (0) 2019.07.23
백준 16137 견우와 직녀  (0) 2019.07.23
백준 2309 일곱 난쟁이  (0) 2019.07.21
백준 1062 가르침  (0) 2019.07.21

댓글