全排列
2013-11-05 17:24
127 查看
#include "stdio.h" #define swap(arr, i , j)\ {\ if ((i) != (j)) {\ int temp;\ temp = arr[i]; \ arr[i] = arr[j]; \ arr[j] = temp;\ }\ } void print_array(int *arr, int len) { int i; printf("\n"); for(i =0; i < len; i++) { printf("%d ", arr[i]); } } int permutation(int *arr, int pos, int n) { int i; if (pos == n) { //递归结束条件 print_array(arr, n); return 0; } for(i = pos; i < n; i++) { swap(arr, i, pos);//某个数字交换到 pos 位置 permutation(arr, pos + 1, n); //对出pos 位置后面的数,进行一次全排列 swap(arr, i, pos);//复原原来的排列,准备交换下一个数到pos 位置。 } return 0; } int main(int argc, char *argv[]) { int n = 0; int i; int number[20]; //已经有2432902008176640000 种排列方法了,输出来也很难保存这样多的数据了,所以程序不能大于这个数字。 printf("input n: "); while (scanf("%d", &n)) { if (n < 1) { printf("n must big than zero. \n"); continue; } if (n > 20) { printf("n too big. \n"); continue; } for (i = 0; i < n; i++) { number[i] = i + 1; } permutation(number, 0, n); printf("\n\ninput n: "); } return 0; }
来至http://www.cnblogs.com/niniwzw/archive/2010/03/19/1689863.html
相关文章推荐
- 求集合子集,和全排列的递归算法实现(c++,Dev C++调试通过)
- 输入四个字母实现全排列
- 常用算法(C#): 用回溯法找出 n 个自然数中取 r 个数的全排列
- 一种变进制数及其应用(全排列之Hash实现)
- 对一个字符数组的元素进行全排列
- c#全排列 和 组合算法
- 笔试面试之字符串的全排列
- 字符全排列的另一种实现
- 【原创】实现全排列
- 集合的子集和集合的全排列问题
- 数字的全排列 问题
- 生成全排列
- python 全排列
- 全排列(n!复杂度)
- 递归输出全排列和全组合
- STL系列之十 全排列(百度迅雷笔试题)
- 数列全排列(递归实现)
- 全排列,排大小,打印素数,乘法表
- 全排列的递归和非递归的实现
- Orders c++生成全排列