今有 n 名学生,要从中选出 k 人排成一列拍照。
请按字典序输出所有可能的排列方式。
仅一行,两个正整数 n,k。
若干行,每行 k 个正整数,表示一种可能的队伍顺序。
输入 #1复制
3 2
输出 #1复制
1 2 1 3 2 1 2 3 3 1 3 2
- #include
- using namespace std;
- int a[10],n,k;
- bool b[10]={0},flag=0;
- void dfs(int x,int n,int k)
- {
- if(x==k)//到边界
- {
- for(int i=0;i
//输出 - {
- cout<" ";
- }
- cout<
- }
- for(int i=1;i<=n;i++)//从n个数中选
- {
- if(b[i]==1)continue;
- for(int j=0;j
//找重复 - if(a[j]==i)flag=1;
- if(flag)continue;
- a[x]=i;
- b[i]=1;//标记
- dfs(x+1,n,k);
- a[x]=0;//回溯
- b[i]=0;//回溯*2
- }
- }
- int main()
- {
- cin>>n>>k;
- dfs(0,n,k);//从0开始搜索
- return 0;
- }