分析:
设R= {r1,r2,r3,……,rn}是要进行排列的n个元素,Ri=R-{ri}。集合X中的元素的全排列记为perm(X).(ri)perm(X)表示在全排列perm(X)的每一个排列前加上前缀ri得到的排列,R的全排列可归纳定义如下:
当n=1,perm(R) = (r) ,其中r是集合R中唯一的元素。
当n>1,perm(R)由(r1)perm(R1),(r2)perm(R2),……,(rn)perm(Rn)构成。#include <iostream>
using namespace std;
void swap(int a[], int i, int j)
{
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
void perm(int a[], int start, int end)
{
int i;
if(start == end)
{
for(i = 0; i <= end; i++)
cout << a[i] << " ";
cout << endl;
}
else
{
for(i = start; i <= end; i++)
{
swap(a,start,i);
perm(a,start + 1,end);
swap(a,start,i);
}
}
}
int main(void)
{
int a[3] = {1,2,3};
perm(a,0,2);
system("pause");
return 0;
}
using namespace std;
void swap(int a[], int i, int j)
{
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
void perm(int a[], int start, int end)
{
int i;
if(start == end)
{
for(i = 0; i <= end; i++)
cout << a[i] << " ";
cout << endl;
}
else
{
for(i = start; i <= end; i++)
{
swap(a,start,i);
perm(a,start + 1,end);
swap(a,start,i);
}
}
}
int main(void)
{
int a[3] = {1,2,3};
perm(a,0,2);
system("pause");
return 0;
}