一个全排列的生成算法
2009-10-09 17:36
411 查看
/** * 全排列生成算法 * 实现枚举A(n,n) */ package sur; import java.util.Scanner; /** * @author lgj * @time 2009.10.06 * */ public class Arrangement { /** * @param args[0] n */ static int n; private static int[] p ;//without using of p[0]&p public static void main(String[] args) { //n = Integer.parseInt(args[0]); System.out.println("Please Input n:"); Scanner sc = new Scanner(System.in); n=sc.nextInt(); int[] a = new int[n+1];//without using of a[0] boolean[] tag = new boolean[n+1]; p = new int[n+1]; int i,j,k; for(i=0;i<=n;i++) { p[i]=0;tag[i]=false;} do { //for(i=0;i<=n;i++) tag[i]=false; for(i=n-1;i>0;i--) { System.out.print(p[i]); j=n;k=0; while(j>0) { if(k==p[i]&&tag[j]==false) break; if(!tag[j]) k++; j--; } a[j]=i+1; tag[j]=true; } for(i=0;i<=n;i++) { if(tag[i]==false) //找到没赋值的地方 赋1 a[i]=1; else tag[i]=false; } System.out.print(" "); for(i=1;i<=n;i++) System.out.print(a[i]); System.out.println(); }while(GetNextPi()); } private static boolean GetNextPi() { p[1]++; int i=1; while(p[i]>i){ p[i]=0; i++; p[i]++; } if(i>=n&&p[i]>=n) return false; return true; } }
实现了自然数1~n 的实现全排列
参考 《组合数学(第二版)》 卢开成 卢华明著 清华大学出版社 2002
相关文章推荐
- 全排列生成算法
- 实现算法2.15、2.16的程序(一个数组只生成一个静态链表)
- 递归解决全排列生成算法
- 一个生成伪随机数的超级算法【转】
- 全排列生成算法:next_permutation
- 全排列生成算法
- 全排列生成算法
- 算法谜题90 座位重排(生成全排列的Johnson–Trotter算法)
- 全排列生成算法(三)
- 全排列生成算法(一)
- 基础算法测试——生成一个1-10之间的随机整数组合
- 从m个不定长数组中 各取一个元素的组合生成算法
- 有序全排列生成算法集锦
- 全排列生成算法
- 如何评价一个伪随机数生成算法的优劣?
- 递归解决全排列生成算法
- 算法笔记(IX) 一个随机数生成问题
- 一种新的全排列生成算法
- 一个简单的QQ隐藏图生成算法
- 一个简单的QQ隐藏图生成算法 通过jQuery和C#分别实现对.NET Core Web Api的访问以及文件上传