1、基于STL实现的全排列(也适用于可重集全排列)
使用前必须先排序
2、基于递归实现的全排列
#include <iostream>
#include <algorithm>
#define MAXSIZE 100
#define type char
using namespace std;
//基于stl实现的全排列 (也适用于可重用集全排列)
void fulPermutation_stl(type c[], int len)
{
int i;
sort(c, c+len);
do{
i = 0;
while(i < len)
{
cout << c[i] << ' ';
++i;
}
cout << endl;
}while(next_permutation(c, c + len));
}
//基于递归实现的全排列
void fulPermutation_recursive(type c[], int k, int len)
{
int i, j;
type ch;
if(k == 0)
{
for(j = 0; j < len; ++j)
cout << c[j] << " ";
cout << endl;
}
else
{
for(i = 0; i <= k; ++i)
{
ch = c[k];
c[k] = c[i];
c[i] = ch;
fulPermutation_recursive(c, k-1, len);
ch = c[k];
c[k] = c[i];
c[i] = ch;
}
}
}
int main()
{
int len;
type c[MAXSIZE];
cin >> len;
for(int i = 0; i < len; ++i)
cin >> c[i];
cout << "----------------基于STL全排列-----------------" << endl;
fulPermutation_stl(c, len);
cout << "----------------基于递归全排列-----------------" << endl;
fulPermutation_recursive(c, len-1, len);
return 0;
}