这题都在注释里了...也就不介绍了吧
#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);
}