枚举排列各种思路代码

1.生成1-n的排列 递归法

 1 #include<stdio.h>
 2 int A[100];
 3 // 输出1~n的全排列
 4 void print_permutation(int n, int* A, int cur) {
 5   int i, j;
 6   if(cur == n) { // 递归边界
 7     for(i = 0; i < n; i++) printf("%d", A[i]);
 8     printf("\n");
 9   } else for(i = 1; i <= n; i++) { // 尝试在A[cur]中填各种整数i
10     int ok = 1;
11     for(j = 0; j < cur; j++)
12       if(A[j] == i) ok = 0; // 如果i已经在A[0]~A[cur-1]出现过,则不能再选
13     if(ok) {
14       A[cur] = i;
15       print_permutation(n, A, cur+1); // 递归调用
16     }
17   }
18 }
    //有点小疑问是对于这一个大数组A每次更新时把以前的数覆盖然后一直输出!!
19 int main() { 20 print_permutation(6, A, 0); 21 return 0; 22 }
原文地址:https://www.cnblogs.com/cgf1993/p/3059566.html