- 注册时间
- 2004-8-29
- 最后登录
- 1970-1-1
|
比如“abc”的所有排列为:
abc
acb
bac
bca
cab
cba
共3!=6个,这个问题用递归的话相对简单些(也不是很简单),这儿给出一种非递归的算法:
- /**
- @ 求出所有排列的非递归算法
- */
- #define MAX_N 12
- long permute(int s){
- int d[MAX_N+1],p[MAX_N+1],pos,level,n,len;
- long count;
- char str[MAX_N+2];
- char temp;
- len =strlen(s);
- if(len>MAX_N) return 0;
- strcpy(str+1,s);
- for(n=0;n<=len;n++){
- d[n] =-1;
- p[n] =n;
- }
- count =0;
- do{
- printf("%s",str+1);
- count++;
- //if(count%5 ==0) getchar();
- printf("\n");
- level =len;
- p[level] =p[level]+d[level];
- pos =0;
- while(p[level]==0||p[level]==level){
- if(d[level]==-1) pos++;
- d[level] =-d[level];
- level--;
- p[level] =p[level]+d[level];
- }
- pos =pos + p[level];
- temp =str[pos];
- str[pos] =str[pos+1];
- str[pos+1] =temp;
- }while(level>0);
- return count;
- }
- void main(){
- long n;
- n =permute("AB");
- printf("%d",n);
- getchar();
- }
复制代码
|
|