实现全排列的另一种方法(续)
实现全排列的另一种方法,就是实现递归。
实现思路:
假如 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[N];
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;
}
自此, 全排列的递归算法就算实现了。。。

浙公网安备 33010602011771号