任务描述
1.设计算法从前m个大写字母(m≤26)种取出n个字母的所有排列(组合),并编程实现
输入格式
输入M N
1<=M=26, N<=M
输出格式
按字典序输出排列
注意:行末不输出多余空格
Sample Input
4 2
Sample Output
A B
A C
A D
B A
B C
B D
C A
C B
C D
D A
D B
D C
#include<stdio.h>
#include<string.h>
char a[100];
int visited[30];
int p=1,m,n;
void search(int k,int m,int n){
int i;
if(k>n){
for(i=1;i<n;i++){
printf("%c ",a[i]);
}
printf("%c\n",a[n]);
}
else {
for(i=1;i<=m;i++){
if(!visited[i]){
a[p++]=i+'A'-1;
visited[i]=1;
search(k+1,m,n);
p--;
visited[i]=0;
}
}
}
}
int main(){
int m,n,i;
scanf("%d %d",&m,&n);
for(i=1;i<=m;i++){
visited[i]=0;
}
int p=1;
search(1,m,n);
}
该博客介绍了如何使用回溯法编程实现从给定的大写字母集合中生成所有可能的n个字母排列。输入为字母数量M和需要排列的字母数N,输出按字典序排列的所有组合。示例代码中,通过递归搜索方法生成了所有可能的排列,并在满足条件时打印。
4607

被折叠的 条评论
为什么被折叠?



