问题遇到的现象和发生背景
7-1 排列问题(*)
从 m (0<m≤26) 个大写字母中任意选出 n (0<n≤m) 个字母排成一行,一共有多少种排列?
请编写程序,输入 m 和 n,输出从 A 开始的连续 m 个字母中任取 n 个字母的所有排列。
要求:每行输出一个排列,按字典序输出。
输入样例
3 2
输出样例
AB
AC
BA
BC
CA
CB
问题:用回溯法解决该问题有一个测试点超时,不知道怎么优化
用代码块功能插入代码,请勿粘贴截图
#include <iostream>
using namespace std;
#define Max 30
int perm[Max];
bool used[Max];
void allsort(int pos,int n,int m){
if(pos==n)//pos与n相同输出打印组合
{
for (int i = 0; i < n; ++i) {
cout<<(char)(perm[i]+'A');
}
cout<<endl;
return;
}
else{
for (int i = 0; i < m; ++i) {
if(!used[i])
{
perm[pos]=i;
used[i]= true;
allsort(pos+1,n,m);
used[i]= false;
}
}
}
}
int main() {
int n,m;
cin>>m>>n;
allsort(0,n,m);
return 0;
}