N과 M의 문제에서 방문 처리를 하지 않은 것으로 풀어냈다. 중복을 뽑아야하기 때문에 중복때문에 방문처리 내용을 제거 한 것이 문제의 핵심인 것 같다.
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int n, m;
int visited[9];
int arr[9];
void permutation(int level)
{
if (level == m)
{
for (int i = 0; i < m; i++)
{
cout << arr[i] << " ";
}
printf("\n");
return;
}
for (int i = 1; i <= n; i++)
{
arr[level] = i;
visited[i] = 1;
permutation(level + 1);
visited[i] = 0;
}
}
int main()
{
cin >> n >> m;
permutation(0);
return 0;
}