題目鏈接:點擊這裏
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int ans[30];
bool vis[30];
int n,r;
void dfs(int x)
{
if(x==r+1) //如果到了不存在的位置,就打印退出
{
for(int i=1;i<=r;i++) //打印
printf("%3d",ans[i]);
printf("\n");
return ;
}
for(int i=1;i<=n;i++) //有1~n個數(卡片)可選
{
if(i>ans[x-1]&&vis[i]==false) //如果該數(卡片)還沒有被使用
{
ans[x] = i; //將該數(卡片)放到位置上
vis[i] = true; //標記爲已使用
dfs(x+1); //執行下一步,在下一個位置再次執行
vis[i] = false; //將嘗試過的數(卡片)收回
}
}
}
int main()
{
scanf("%d%d",&n,&r);
dfs(1);
return 0;
}