递归输出全排列的所有元素

这题都在注释里了...也就不介绍了吧

#include <iostream>
#include <string>
#include <vector>
using namespace std;

/*  递归输出全排列的所有元素
    思路:一个n个元素的全排列可看成由n-1个元素的全排列和一个元素作为首位组成,当递归中只有一个元素时,输出
        逐渐的将每一个元素放到第一位,剩下的元素做全排列运算,直到最后一位元素*/

typedef unsigned size_t;

template<typename T>
void swap(T &_X, T &_Y) {   //辅助函数,交换两个变量的值
    T _Tmp = _X;
    _X = _Y;
    _Y = _Tmp;
}

template<typename Con_T>
size_t permutation(Con_T& _Source, size_t _First, size_t _Last) {   //函数的返回值是该次递归生成的元素个数
    using ::swap;   //函数的参数的含义分别为容器,容器的头,容器的尾
    size_t sum = 0;                         //计算排序的个数
    if (_First == _Last) {                      //递归出口
        for (size_t i = 0; i < _Last; ++i)
            cout << _Source[i];
        ++sum;
        cout << endl;
    }
    else
        for (size_t j = _First; j < _Last; ++j) {
            swap(_Source[_First], _Source[j]);                  //交换递归的首位和第j位元素
            sum += permutation(_Source, _First + 1, _Last); //对余下的元素进行递归
            swap(_Source[j], _Source[_First]);                  //还原
        }
    return sum;
}

int main() {
    string str = "abc";
    cout << permutation(str, 0, str.length()) << endl;
    int arr[] = { 1,2,3,4 };
    cout << permutation(arr, 0, 4);
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。