zoukankan      html  css  js  c++  java
  • 全排列的递归算法

    递归思想来进行全排列是最接近人的思维的,例如对a, b , c,进行全排列第一轮是a**,b**,c**,第二轮是ab*,b a*, c b*,就是轮番把一个数固定在首位,然后剩下几位进行枚举;
    代码:
    #include
    using namespace std;
    int total = 0;
    //交换函数
    void swapArray(int &a,int &b)
    {
        int temp;
        temp = a;
        a = b;
        b = temp;
    }
    //递归函数
    void fullPermutation(int * fullArray,int start,int endn,int number){
        //这里,既可以是">=",也可以是">",,应该也可以是"=="
        if(start>=endn){
            for(int i=0;i
                cout<<fullArray[i];
            }
            cout<<endl;
            total++;
        }
        else{
            for(int i=start;i<=endn;i++){
                swapArray(fullArray[start],fullArray[i]);//交换
                fullPermutation(fullArray,start+1,endn,number);
                swapArray(fullArray[start],fullArray[i]);//注意恢复原样
            }
        }
    }
    int main()
    {
        int number;//全排列的长度
        cout<<"Number:"<<endl;
        cin>>number;
        int * fullArray = new int[number];//动态生成全排列的数组
        //初始化
        for (int i=0;i
        {
            fullArray[i] = i+1;
        }
        fullPermutation(fullArray,0,number-1,number);
        cout<<"Total = "<<total;
        return 0;
    }

  • 相关阅读:
    2015第二周日
    2015第二周六
    2015第二周五
    反思java web的发展
    servlet/filter/listener/interceptor区别与联系
    WSSecurity简述
    2015第2周一数据传输安全
    2015第一周日
    2015第1周六2015技术努力方向
    插入排序
  • 原文地址:https://www.cnblogs.com/wuwangchuxin0924/p/5781634.html
Copyright © 2011-2022 走看看