본문 바로가기

Baekjoon/C++

[C++][BOJ/백준] 10974 모든 순열

 

 

Baekjoon Online Judge

 

클릭 시 문제로 이동

 

 

[문제]

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

 

 

[입력]

첫째 줄에 N(1 ≤ N ≤ 8)이 주어진다.

 

 

[출력]

첫째 줄부터 N!개의 줄에 걸쳐서 모든 순열을 사전순으로 출력한다.

 

 


 

[코드]

#include <iostream>
using namespace std;

#define MAX 9

int N;
int arr[MAX];
bool visited[MAX];

void dfs(int cnt)
{
    if (cnt == N)
    {
        for (int i = 0; i < N; i++)
            cout << arr[i] << " ";

        cout << '\n';

        return;
    }

    for (int i = 1; i <= N; i++)
    {
        if (!visited[i])
        {
            arr[cnt] = i;
            visited[i] = true;

            dfs(cnt + 1);
            visited[i] = false;
        }
    }
}

int main()
{
    cin >> N;

    dfs(0);

    return 0;
}