가능한 조합의 개수를 구하는 문제이다.
백트래킹을 이용해서 문제를 풀 수 있으며 백트래킹은 dfs를 기반으로 탐색하는 방식이다.
#include <bits/stdc++.h>
using namespace std;
int board[10];
bool vis[10];
int n, m;
void func(int k)
{
if (k == m)
{
for (int i = 0; i < m; ++i)
cout << board[i] << ' ';
cout << '\n';
return;
}
for (int i = 1; i <= n; ++i)
{
if (!vis[i])
{
board[k] = i;
vis[i] = 1;
func(k + 1);
vis[i] = 0;
}
}
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n >> m;
func(0);
}