生成1~n的排列的三种方法
2016-11-11 21:22
274 查看
#include <cstdio> #include <algorithm> const int MAXN = 10; bool used[MAXN + 1]; int n, a[MAXN + 1]; void search(int i) { if (i == n + 1) { for (int i = 1; i <= n; i++) printf("%d%c", a[i], i == n ? '\n' : ' '); return; } for (int j = 1; j <= n; j++) { if (!used[j]) { used[j] = true; a[i] = j; search(i + 1); used[j] = false; } } } void print_permutation(int n, int *A, int cur) //用*A传A数组 { if (cur == n) //递归边界 { for (int i = 0; i < n; i++) printf("%d ", A[i]); printf("\n"); } else for (int i = 1; i <= n; i++) //尝试在A[cur]中填各种整数i { int ok = 1; for (int j = 0; j < cur; j++) if (A[j] == i) ok = 0; //即i已经在A[0]~A[cur-1]中出现过 if (ok) //说明i没有在序列中出现过 { A[cur] = i; //把它添加到序列末尾 print_permutation(n, A, cur + 1); //递归调用 } } } int main() { scanf("%d", &n); search(1); static int a[MAXN + 1]; for (int i = 1; i <= n; i++) a[i] = i; do { for (int i = 1; i <= n; i++) printf("%d%c", a[i], i == n ? '\n' : ' '); } while (std::next_permutation(a + 1, a + n + 1)); //如果循环完了就会返回一个false //next_permutation传的参数和sort一样 }
这三种随便写一种就行
【代码其中之一来自紫书,其他的来自Menci,注释是我自己加的啦(:з」∠)】
相关文章推荐
- 生成排列的三种方法
- C#生成随机数的三种方法
- php生成随机密码的三种方法
- C#生成随机数的三种方法
- php生成随机数的三种方法
- 两种生成全排列序列的方法
- PHP生成随机密码的三种方法
- 三种用PHP生成静态html文件的方法
- 三种用PHP生成静态html文件的方法
- 生成WSDL文件的三种方法
- 使用三种方法求解前N个正整数的排列
- YbSoftwareFactory 代码生成插件【二十五】:Razor视图中以全局方式调用后台方法输出页面代码的三种方法
- 最小生成树(MST)三种实现方法C++版本
- 编程小程序:1.编写程序,每次程序运行,产生5组双色球号码。每组号码升序排列,至少写出三种排序方法。
- C#生成随机数的三种方法
- 三种让网站图片生成灰色效果的方法
- js jquery获取随机生成id的服务器控件的三种方法
- php中生成唯一标示符的三种方法
- 字符串反序排列的三种方法
- C#生成随机数的三种方法