冬Blog

醉心技术、醉心生活
  博客园  :: 首页  :: 新随笔  :: 订阅 订阅  :: 管理

给出一个字符数组的全排列

Posted on 2006-08-16 17:05  冬冬  阅读(567)  评论(0编辑  收藏  举报
#include <stdio.h>

char InputString[100];
char OutputString[100];
int MarkArray[100];
int StringLength;
int Number;

void processString(int cursor)
{
    
int i=0;
    
if(cursor==StringLength)
    
{
        puts(OutputString);
        Number
++;
        
return;
    }

    
while(i<StringLength)
    
{
        
if(MarkArray[i]==0)
        
{
            MarkArray[i]
=cursor+1;
            OutputString[cursor]
=InputString[i];
            processString(cursor
+1);
            MarkArray[i]
=0;
        }

        i
++;
    }

}


int main()
{
    
int i=0;
    
for(i=0;i<100;i++) MarkArray[i]=0;
    
    gets(InputString);
    
    StringLength
=0;
    
while(InputString[StringLength]!='\0'&&StringLength<100) StringLength++;
    OutputString[StringLength]
='\0';
    
    processString(
0);
    
    printf(
"Total:%d",Number);
    
return 0;
}

说明:
递归算法,cursor表示游标,每次从输入的数组中读出一个字符,游标前进一,然后递归,当游标等于输入的数组的长度时,递归结束,输出结果。