用递归实现对N个元素的排列:
template<class Type>
void Perm(Type list[], int k, int m)
{
if ( k == m) // 单元素排列
{
for ( int i = 0; i <= m; i++ )
cout<<list[i];
cout<<endl;
}
else // 多元素排列,递归产生排列
{
for ( int i = k; i <= m; i++ )
{
swap(list[k],list[i]; // 将元素提到前面的位置(相对的第一个位置),逐步往前提
Perm(list,k+1,m);
swap(list[k],list[i]; // 将元素换回以前的位置 以免影响后面的排列
}
}
template < class Type>
void swap( Type &a, Type &b)
{
Type tmp = a;
a = b;
b = tmp;
}