Lec5-输出全排列问题

分析:

设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;    
}
posted @ 2011-05-04 16:09  Avril  阅读(283)  评论(0编辑  收藏  举报