代码:
#include <iostream>
#include <assert.h>
using namespace std;
/**
*\brief 求全排列的递归实现
*\param arr-数组指针
* nLen-数组长度
* nBegin-排列区间的起始序号
* nEnd-排列区间的末尾序号
*\return 无
**/
template<class T>
void Perm(T arr[], int nLen, int nBegin, int nEnd)
{
assert(nBegin>=0 || nEnd<=nLen-1 || nBegin<=nEnd);
if (nBegin==nEnd) {
for(int i=0; i<nLen; i++) {
cout<<arr[i];
}
cout<<endl;
}
for(int i=nBegin; i<=nEnd; i++) {
swap(arr[nBegin],arr[i]);
Perm(arr, nLen, nBegin+1, nEnd);
swap(arr[nBegin],arr[i]);
}
}
int main(int argc, char *argv[])
{
char lt[] = {'a','b','c','d'};
Perm(lt, sizeof(lt), 0, 3);
}
reference:
1 http://www.cnblogs.com/nokiaguy/archive/2008/05/11/1191914.html