分析:
设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)由(r 1)perm(R 1),(r 2)perm(R 2),……,(r n)perm(R n)构成。
#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 ;
}