- 题目描述:
-
给定一个由不同的小写字母组成的字符串,输出这个字符串的所有全排列。
我们假设对于小写字母有'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
- 提示:
-
每组样例输出结束后要再输出一个回车。
1 #include <cstdio> 2 #include <cstdlib> 3 #include <cstring> 4 #include <string> 5 #include <algorithm> 6 7 int cmp(const void *a, const void *b) { 8 char at = *(char *)a; 9 char bt = *(char *)b; 10 return at - bt; 11 } 12 13 char temp[10]; 14 char oTemp[10]; 15 int flag[10]; 16 17 void dfsShow(int len, int has) { 18 for(int i = 0; i < len; i++) { 19 if(flag[i] == 0) { 20 oTemp[has] = temp[i]; 21 if(has == len-1) { 22 puts(oTemp); 23 } 24 flag[i] = 1; 25 dfsShow(len, has+1); 26 flag[i] = 0; 27 } 28 } 29 } 30 31 int main(int argc, char const *argv[]) 32 { 33 while(scanf("%s",&temp) != EOF) { 34 int len = strlen(temp); 35 qsort(temp, len, sizeof(char), cmp); 36 //puts(temp); 37 memset(flag, 0, sizeof(flag)); 38 oTemp[len] = ''; 39 dfsShow(len, 0); 40 puts(""); 41 } 42 return 0; 43 }
开始没看见提示,格式错误,只好又提交一次了