您的位置:首页 > 其它

递归实现n个不同字符的所有全排列

2016-05-13 20:50 267 查看
设str是含有n个不同字符的数组例如含123,perm(str,k,n)为str[k]~str[n-1]的所有字符全排序输出函数。很明显,perm(str,k+1,n)处理的字符个数比perm(str,k,n)处理的字符个数少一个。假定perm(str,k+1,n)可求,对于第k个位置可以任取k~n-1内任意元素作为str[k],再组合perm(str,k+1,n)得到perm(str,k,n)。

由此建立递归模型:

if k==n-1 输出str

else 任取k~n-1内任意元素作为str[k]+perm(str,k+1,n)

void perm(int a[],int k,int n){
int i,j;
if(k==n-1){for(i=0;i<n;i++)cout<<a[i]<<" ";cout<<endl;}
else{
for(i=k;i<n;i++){
int t;t=a[k];a[k]=a[i];a[i]=t;//任取k-(n-1)
perm(a,k+1,n);
t=a[k];a[k]=a[i];a[i]=t;//还原k-(n-1)以得到原始数组,下次再任取
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: