字符串全排列

来源:互联网 发布:单片机delay延时函数 编辑:程序博客网 时间:2024/05/27 00:33

http://blog.163.com/yunfei_lei@126/blog/static/140864561201181694915129/

/*设R={r1,r2,...,rn}是要进行排列的n个元素,Ri=R-{ri}.Perm(X)表示在全排列Perm(X)的每一个排列前加上前缀ri得到的排列。(1)当n=1时,Perm(R)=(r),其中r是集合R中唯一的元素;(2)当n>1时,Perm(R)可由(r1)+Perm(R1),(r2)+Perm(R2),...,(rn)+Perm(Rn)构成。此算法就是按照上述思想来设计的。不难想出,次算法使用递归思想比较容易实现。设Perm(list,k,m)递归地产生所有前缀是list[0:k-1],且后缀是list[k:m]的全排列的所有排列。那么调用算法Perm(list,0,n-1)则产生list[0:n-1]的全排列。*/#include<iostream>#include<vector>using namespace std;vector<int> ivec;void Perm(char s[], int k, int m){if(k == m)cout<<s<<endl;for(int i = k; i <= m; i++){// 去重if(s[i] == s[k] && i != k)continue;swap(s[k], s[i]);Perm(s, k+1, m);swap(s[k], s[i]);}}int main(){char str[] = "abc";Perm(str, 0, strlen(str) - 1);int a[4]={1, 2, 3,4};int *ptr = (int *)(&a + 1);cout<<*(ptr - 1); return 0;}


0 0
原创粉丝点击