난이도: 실버 3
https://www.acmicpc.net/problem/15649
15649호:N과 M(1)
문제의 조건을 만족하는 일련의 숫자를 한 줄에 하나씩 인쇄합니다. 중복 시퀀스는 한 번 이상 인쇄해서는 안 되며 각 시퀀스는 공백으로 구분하여 인쇄해야 합니다. 시퀀스는 알파벳 오름차순으로 인쇄됩니다.
www.acmicpc.net
주어진 자연수 N과 M이 주어지면 다음 조건을 만족하는 길이 M의 모든 시퀀스를 찾는 프로그램을 작성하십시오.
- 1부터 N까지의 자연수 중에서 중복없이 선택된 M개의 수열
기입
자연수 N과 M은 첫 줄에 주어진다. (1≤M≤N≤8)
누르다
문제의 조건을 만족하는 일련의 숫자를 한 줄에 하나씩 인쇄합니다. 중복 시퀀스는 한 번 이상 인쇄해서는 안 되며 각 시퀀스는 공백으로 구분하여 인쇄해야 합니다.
시퀀스는 알파벳 오름차순으로 출력되어야 합니다.

설명
#include <iostream>
using namespace std;
#define MAX 8
int N, M;
int arr(MAX);
bool visited(MAX);
void DFS(int depth)
{
if (depth == M)
{
for (int i = 0; i < M; i++)
cout << arr(i) << " ";
cout << "\n";
return;
}
for (int i = 1; i <= N; i++)
{
// 이전에 방문되지 않은 수를 배열에 저장함
if (visited(i - 1) == false)
{
visited(i - 1) = true;
arr(depth) = i;
DFS(depth + 1);
visited(i - 1) = false;
}
}
}
int main()
{
cin >> N >> M;
DFS(0);
}