/** * 全排列生成算法 * 实现枚举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[n] 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