穷举所有排列
描述:
输入一个小于10的正整数n,按把每个元素都交换到最前面一次的方法,输出前n个小写字母的所有排列。
输入:
输入一个小于10的正整数n。
输出:
按把每个元素都交换到最前面一次的方法,输出前n个小写字母的所有排列。
输入样例:
3
输出样例:
abc
acb
bac
bca
cba
cab
1 #include<stdio.h> 2 3 int n; 4 int str[10001]; 5 int used[10001] = {0}; 6 7 void dfs(int x); 8 9 int main() 10 { 11 scanf("%d", &n); 12 13 for (int i=97; i<122; i++) 14 { 15 str[i-97] = i; 16 } 17 18 dfs(0); 19 20 return 0; 21 } 22 23 void dfs(int x) //递归思想与穷举二进制数类似,第一位固定, 将次高位与第一位交换 24 { 25 int i; 26 if (x == n) 27 { 28 for (i=0; i<n; i++) 29 { 30 printf("%c", str[i]); 31 } 32 printf("\n"); 33 } 34 else 35 { 36 for (i=x; i<n; i++) //从str[0]相互交换,再交换str[0] 与 str[1] , 再交换str[0] 与 str[2] 37 { 38 int temp; 39 temp = str[i]; 40 str[i] = str[x]; 41 str[x] = temp; 42 dfs(x+1); 43 temp = str[i]; 44 str[i] = str[x]; 45 str[x] = temp; 46 } 47 } 48 } 49