您的位置:首页 > 其它

用递归求解全排列问题(个人理解)

2016-10-07 00:00 211 查看
//求1~n的全排列
#include<stdio.h>

void show(int a[],int n){
int i;
for(i = 0;i<n;i++){
printf("%d",a[i]);
}
printf("\n");
}

void perm(int a[],int n,int k){
if(k==n){
//排完了一个排列调用show()方法显示
show(a,n);
}
else{
for(int i=1;i<=n;i++){
bool has = false; //作为 i 是否已在 a 中的标记
for(int j=0;j<k;j++){
//循环判断 i 是否在 a 中
if(a[j]==i){
//若 i 在 a 中,则将标记置为 true
has = true;
}
}
if(!has){
//将i填入当前位置
a[k] = i;
//填下一位置的数
perm(a,n,k+1);
}
/*
若i<=n则循环会继续
如果条件符合
则重新设置a[k]后。继续调用 perm(a,n,k+1);
*/
}
}
}

int main(){
int a[10];
int n;
printf("输入n: ");
scanf("%d",&n);
printf("1~%d的全排列如下:\n",n);
perm(a,n,0);
return 0;
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: