ybt 1199字母全排列
阿新 • • 發佈:2017-08-28
算法 遞歸
全排列 時間限制: 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]); } }
ybt 1199字母全排列