全排列
时间限制: 1000 ms 内存限制: 65536 KB
提交数: 151 通过数: 111
【题目描述】
给定一个由不同的小写字母组成的字符串,输出这个字符串的所有全排列。
我们假设对于小写字母有‘a’ <‘b’ < ... <‘y’<‘z’,而且给定的字符串中的字母已经按照从小到大的顺序排列。
【输入】
只有一行,是一个由不同的小写字母组成的字符串,已知字符串的长度在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
【来源】
No
#include<iostream>#include<cstdio>
#include<cstring>
using namespace std;
char b[10000][8];int k;
void pai(char a[],int index,int num,int lenth )
{
if(num==1)
{
k++;
for(int i=0;i<lenth;i++)
{
b[k][i]=a[i];
}
return;
}
for(int i=0;i<num;i++)
{
swap(a[index+i],a[index]);
pai(a,index+1,num-1,lenth);
swap(a[index],a[index+i]);
}
return;}int main(){
char a[10];
scanf("%s",a);
int l=strlen(a);
pai(a,0,l,l);
for(int i=k;i>0;i--)
{
for(int j=0;j<i;j++)
{
if(strcmp(b[i],b[j])<0)
swap(b[i],b[j]);
}
}
for(int i=1;i<=k;i++)
{
puts(b[i]);
}
}