码迷,mamicode.com
首页 > 编程语言 > 详细

递归算法:求序列的全排列

时间:2014-11-13 20:36:50      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:style   io   ar   os   sp   for   文件   div   on   

用C++模板书写一段序列数组的所有排列


/**
* 书本:【windows程序设计】
* 功能:输出所有的排列情况
* 文件:全排列.cpp
* 时间:2014年9月29日21:52:55
* 作者:cutter_point
*/

#include <iostream>

using namespace std;

//交换两个元素的函数
template<class Type>
inline void Swap(Type &a, Type &b)  //取两个元素的引用,等会来交换
{
    Type temp=a;
    a=b;
    b=temp;
}

//这个是一个递归为了输出所有的排列情况
template<class Type>
void Perm(Type list[], int k, int m)
{
    //这个函数是为了产生所有的排列情况
    if(k == m)  //就是当k和m相等的时候,就输出序列
    {//就是剩下一个元素的时候
        for(int i=0 ; i <= m ; ++i)
            cout<<list[i]<<' ';
        cout<<endl;
    }
    else    //还有多个元素等待排列,递归产生排列
    {
        for(int i=k ; i <= m ; ++i) //从第k个開始吧第k个和i个交换输出
        {
            Swap(list[k], list[i]); //交换第k和第i个元素
            Perm(list, k+1, m);     //仅仅要不是最后一个,就是第二个參数不是最后一个时,调用自己
            Swap(list[i], list[k]); //换回来,进行下一个排列的变换
        }
    }
}



int main()
{
    int n;      //要进行排序的个数
    //定义一个序列的个数
    cout<<"输入你想要进行排序的个数"<<endl;
    cin>>n;
    int a[n];   //存放所有的个数
    cout<<"输入序列:"<<endl;
    for(int i=0 ; i < sizeof(a)/sizeof(int) ; ++i)
        cin>>a[i];

    cout<<"所有的排序结果:"<<endl;
    Perm(a, 0, sizeof(a)/sizeof(int)-1);

    int m;      //要进行排序的个数
    //定义一个序列的个数
    cout<<"输入你想要进行排序的字符个数"<<endl;
    cin>>m;
    char b[m];   //存放所有的个数
    cout<<"输入字符序列:"<<endl;
    for(int i=0 ; i < sizeof(b)/sizeof(char) ; ++i)
        cin>>b[i];

    cout<<"所有的排序结果:"<<endl;
    Perm(b, 0, sizeof(b)/sizeof(char)-1);

    return 0;
}

我在想我是接下来搞算法还是搞QT呢????

递归算法:求序列的全排列

标签:style   io   ar   os   sp   for   文件   div   on   

原文地址:http://www.cnblogs.com/lcchuguo/p/4095642.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!