zoukankan      html  css  js  c++  java
  • 实现全排列的另一种方法(续)

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

    实现思路:    

        假如 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
Copyright © 2011-2022 走看看