题目描述
今有 n 名学生,要从中选出 k 人排成一列拍照。
请按字典序输出所有可能的排列方式。
输入格式
仅一行,两个正整数 n,k。
输出格式
若干行,每行 k 个正整数,表示一种可能的队伍顺序。
输入输出样例
输入 #1复制文章来源:https://www.toymoban.com/news/detail-835732.html
3 2
输出 #1复制文章来源地址https://www.toymoban.com/news/detail-835732.html
1 2 1 3 2 1 2 3 3 1 3 2
#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;
}
到了这里,关于B3623枚举排列的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!