文件名称:分治法求枚举排序(包含详细解答及分析)
文件大小:4KB
文件格式:CPP
更新时间:2014-06-26 14:53:44
算法课的作业报告,有详细解释以及分析文字。并附带运行结果
输入n个数,按照字典序从小到大的顺序输出前n个数的所有排列。 核心代码: void print_permutation(int n, int*a,int cur) { int i,j; if(cur==n) //当存入的数组a的数量到达n时,这时候就可以输出 { for(i = 0 ; i < n; i++) printf("%d \t",a[i]); printf("\n"); } else { for(i = 1; i <= n; i++) //循环变量i是考察当前a[cur],检查i是否在之前被用过 { int ok=1; for(j = 0; j < cur ;j++ )//检查cur之前的几位,看是否有与cur相同的项。 if(a[j]==i) ok=0; if(ok) { a[cur] = i; //如果i没有出现在cur之前的几位,那么将cur插入到数组中 print_permutation(n,a,cur+1);//递归调用 } } } } 运行结果: please input a number 3 1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1 请按任意键继续. . .