#C07L03P05. C07.L03.组合数学之排列问题.排列方案的递归编程1.程序模板
C07.L03.组合数学之排列问题.排列方案的递归编程1.程序模板
求:
前 N 个小写字母中取 M 个的所有排列。 按照字典序从小到大输出。
0 < M <= N <6
#include<bits/stdc++.h>
using namespace std;
int ans[10],n,m;;
bool used[10];
void dfs(int l) //l表示这一次调用是找第l个字母,找到之后填入ans数组
{
int i;
if(l==m+1) //已经选够m个字母,输出
{
for(i=1;i<=m;i++)
printf("%c",'a'+ans[i]);
printf("\n");
}
else
{
for(i=0;i<n;i++)
{
if(used[i]) continue; //表示第i个字母已经在之前被选过,不能重复选
used[i] = true; //打上标记,选后面的字母的时候不能在选这个字母
ans[l] = i; //选了这个字母记录在ans数组里面,以便将来打印输出
dfs(l+1); //递归,继续找下一个字母
used[i] = false; //取消标记,选后面的字母的时候可以选第i个字母
}
}
}
int main()
{
cin>>n>>m;
dfs(1); //从第1个字母开始找
return 0;
}
相关
在以下作业中: