您的位置:首页 > 其它

实现全排列的另一种方法(续)

2012-12-15 21:11 260 查看
      实现全排列的另一种方法,就是实现递归。

实现思路:

假如 allsort(a b c);分治思想化为a+allsort(b c); b+allsort(a c), c+allsort(a b);

递归一层后计算第二层时:如allsort(b c)时,化为b+allsort(c) 和 c+allsort(b);

此时问题就明显了,首先确定一个元素,求剩下的全排列,如此类推下去做一个递归;

实现代码:

#include <stdio.h>
#define N 4
int a
;
void perm(int);
void print();
void move(int, int);
int main(){
int i;
for(i = 0; i<N; i++){
scanf("%d",&a[i]);
}
perm(0);
}

void perm(int offset){
int i;
if(offset == N-1){
print();
return;
}else{
for(i = offset;i < N; i++){
move(i, offset);
perm(offset + 1);
move(i, offset);
}
}
}
void print(){
int i;
for(i = 0; i < N-1; i++)
printf("%d ",a[i]);
printf("\n");
}
void move(int i, int offset){
int temp;
temp = a[offset];
a[offset] = a[i];
a[i] = temp;
}


自此, 全排列的递归算法就算实现了。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: