回溯法
#include <iostream>
using namespace::std;
using std::cout;
using std::cin;
int x[21],visit[21],n,r;
void DFS(int k)
{
if(k>r)
{
for(int i=1;i<=r;i++)
{
std::cout << x[i] << " ";
}
return;
}
for(int i=x[k-1]+1;i<=n;i++)
{
if(!visit[i])
{
x[k]=i;
visit[i]=1;
DFS(k+1);
visit[i]=0;
}
}
}
int main()
{
x[0]=0;
fill(visit,visit+21,0);
cin>>n>>r;
DFS(1);
return 0;
}