博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
全排列的递归算法
阅读量:6695 次
发布时间:2019-06-25

本文共 900 字,大约阅读时间需要 3 分钟。

递归思想来进行全排列是最接近人的思维的,例如对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;
}

转载于:https://www.cnblogs.com/wuwangchuxin0924/p/5781633.html

你可能感兴趣的文章
jmap详解
查看>>
20170118修改商品流水
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
找出两个数组中相同的元素
查看>>
Maven学习总结(八)——使用Maven构建多模块项目
查看>>
Oracle升级出现ORA-04063 DBMS_REGISTRY has error
查看>>
linux配置java环境变量(详细)
查看>>
JavaScript强化教程——cocosjs屏幕适配方案
查看>>
更易操作的网页细节—background背景
查看>>
c#打造百度搜索框(创世纪篇)
查看>>
新年的决心----resolution
查看>>
Microsoft Dynamics CRM
查看>>
H3C交换机 IP+MAC 配置
查看>>
初识缓存Cache
查看>>
易宝典文章——怎样管理Exchange Server 2013邮箱邮件流功能之传递选项
查看>>
学习笔记——Python」Python中的类(classes)
查看>>
如何在Windows中批量创建VMware的虚拟机
查看>>
敏捷开发采取面向对象的设计原则
查看>>
由浅入深分析mybatis通过动态代理实现拦截器(插件)的原理
查看>>