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

      实现全排列的另一种方法,就是实现递归。

实现思路:    

    假如 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;
 }

自此, 全排列的递归算法就算实现了。。。

原文地址:https://www.cnblogs.com/fightingxu/p/2819786.html