全排列 时间限制: 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]); } }
时间: 2024-10-16 15:36:31