输入只有一行,是一个由不同的小写字母组成的字符串,已知字符串的长度在1到6之间。
输出这个字符串的所有排列方式,每行一个排列。要求字母序比较小的排列在前面。字母序如下定义: 已知S = s1s2...sk , T = t1t2...tk,则S < T 等价于,存在p (1 <= p <= k),使得 s1 = t1, s2 = t2, ..., sp - 1 = tp - 1, sp < tp成立。 每组样例输出结束后要再输出一个回车。
abc
abc acb bac bca cab cba
#include<stdio.h>
char string[26];
int visit[26]={0};
char out[26];
void quanpailie(char string[],int n,int h){
int i,j;
if(h>=n){
for(i=0;i<n;i++)
printf("%c",out[i]);
printf("\n");
}
for(i=0;i<n;i++){
if(visit[i]==1)
continue;
out[h]=string[i];
visit[i]=1;
quanpailie(string,n,h+1);
visit[i]=0;
}
return;
}
int main(){
int i=1;
char c;
while(scanf("%c",&c)!=EOF){
string[0]=c;
while((c=getchar())!='\n')
string[i++]=c;
quanpailie(string,i,0);
printf("\n");
i=1;
}
}