题目描述
今有 n 名学生,要从中选出 k 人排成一列拍照。
请按字典序输出所有可能的排列方式。
输入格式
仅一行,两个正整数 n,k。
输出格式
若干行,每行 k 个正整数,表示一种可能的队伍顺序。
输入输出样例
输入 #1复制
3 2
输出 #1复制
1 2
1 3
2 1
2 3
3 1
3 2
cpp
#include<bits/stdc++.h>
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<k;i++)//输出
{
cout<<a[i]<<" ";
}
cout<<endl;
}
for(int i=1;i<=n;i++)//从n个数中选
{
if(b[i]==1)continue;
for(int j=0;j<x;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;
}