给定一个由不同的小写字母组成的字符串,输出这个字符串的所有全排列。 我们假设对于小写字母有 'a' < 'b' < ... < 'y' < 'z',而且给定的字符串中的字母已经按照从小到大的顺序排列。
输入格式
输入只有一行,是一个由不同的小写字母组成的字符串,已知字符串的长度在 11 到 66 之间。
输出格式
输出这个字符串的所有排列方式,每行一个排列。要求字母序比较小的排列在前面。字母序如下定义:
已知 S = s_1s_2...s_k, T = t_1t_2...t_kS=s1s2...sk,T=t1t2...tk,则 S < TS<T 等价于,存在 p (1 \le p \le k)p(1≤p≤k),使得 s_1 = t_1, s_2 = t_2, ..., s_{p - 1} = t_{p - 1}, s_p < t_ps1=t1,s2=t2,...,sp−1=tp−1,sp<tp 成立。
Sample 1
Inputcopy | Outputcopy |
---|---|
abc | abc acb bac bca cab cba |
#include<stdio.h>
#include<string.h>
char zhifu[10],a[10];
int book[10],len,i;
void dfs(int type)
{
if(type==strlen(zhifu))
{
printf("%s",a);
printf("\n");
return;
}
int i;
for(i=0;i<strlen(zhifu);i++)
{
if(book[i]==0)
{
a[type]=zhifu[i];
book[i]=1;
dfs(type+1);
book[i]=0;
}
}
return;
}
int main()
{
scanf("%s",zhifu);
dfs(0);
return 0;
}