题目:输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则打印,abc,acb,bac,bca,cab,cba
思路:
1,求所有可能出现在第一个位置的字符,即把第一个字符与后面所有的字符交换
2,固定第一个字符,求后面所有字符的排列。
3,这时候求后面字符排列,做递归,重复1,2
源代码:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int f(int n)
{
if(n==1)
return 1;
return n*f(n-1);
}
void swap1(char* p,char* q)
{
char* temp;
temp=p;
p=q;
q=temp;
}
void swap(char* p,char* q)
{
char temp;
temp=*p;
*p=*q;
*q=temp;
}
void Permutation(char* pRoot,char* pBegin)
{
//printf("%s",pRoot);
if(*pBegin == '\0')
printf("%s\n",pRoot);
else{
char *pCh;
for(pCh=pBegin;*pCh != '\0';++pCh)
{
swap(pCh,pBegin);
Permutation(pRoot,pBegin+1);
swap(pCh,pBegin);
}
}
}
void Permutation1(char* pRoot)
{
if(pRoot == NULL)
return;
Permutation(pRoot,pRoot);
}
void main()
{
char p='p',q='q';
printf("p:%c",p);
printf("q:%c",q);
swap(&p,&q);
printf("p:%c",p);
printf("q:%c\n\0",q);
char c[50];
gets(c);
//c[strlen(c)]='\0';
//printf("%s",c);
Permutation1(c);
}
结果:
p:pq:qp:qq:p
abcd
abcd
abdc
acbd
acdb
adcb
adbc
bacd
badc
bcad
bcda
bdca
bdac
cbad
cbda
cabd
cadb
cdab
cdba
dbca
dbac
dcba
dcab
dacb
dabc