7-1 排列问题(*)
从 m (0
请编写程序,输入 m 和 n,输出从 A 开始的连续 m 个字母中任取 n 个字母的所有排列。
要求:每行输出一个排列,按字典序输出。
输入样例
3 2
输出样例
AB
AC
BA
BC
CA
CB
问题:用回溯法解决该问题有一个测试点超时,不知道怎么优化
#include
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<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;
}
我在博客中写过,在零基础冲国赛的第二十天