排列

来源:互联网 发布:百锐腾软件 编辑:程序博客网 时间:2024/04/28 05:09

排列

a,b,c的排列形式有abc,acb,bac,bca,cab,cba,六种排列方式。
采用递归的方法来实现排列。众所周知,递归分为两个部分,一个是基础部分,一个是递归部分。在解决排列问题中,递归的基础部分是:当只有一个元素时,排列就是它本身。
下面主要分析递归部分。令E={e1,e2,...,en}表示n个元素的集合。Ei表示E中去除了第i个元素后的集合,perm(X)表示对集合X的排序,显然当集合X只有一个元素时{x},perm({x})=x。ei.perm(X)表示在所有X的排列前面加上ei。例如E={a,b,c};E1={b,c},perm(E1)=(bc,cb),e1.perm(E1)=(abc,acb)。所以当n>1时,perm(E) = e1.perm(E1)+e2.perm(E2)+...+en.perm(En).这种递归定义形式采用n个perm(X)来定义perm(E),其中每个X包含n-1个元素。

代码如下:
#include<iostream>using namespace std;template<class T>inline void Swap(T& a,T& b){T temp = a;a = b;b = temp;}template<class T>void Perm(T list[],int k, int m){int i;if(k==m){for(i=0; i<m; i++){cout<<list[i];}cout<<endl;}else{for(i=k; i<m; i++){Swap(list[k],list[i]);Perm(list,k+1,m);Swap(list[k],list[i]);}}}int main(){char list[] = {'a','b','c'};Perm(list,0,3);return 1;}

0 0