class Test2 ... { static int n; static int x[]; static boolean flag=true; public static void main(String[] args) throws Exception ...{ nQueen(100); } public static boolean QueensLV(int stopVegas) ...{ int k=1; int count=1; while((k<=stopVegas)&&(count>0)) ...{ count=0; int j=0; for(int i=1;i<=n;i++) ...{ x[k]=i; if(Place(k)) if((int)(Math.random()*(++count))==0)j=i; } if(count>0)x[k++]=j; } return (count>0); } public static boolean Place(int k) ...{ for(int j=1;j<k;j++) if((Math.abs(k-j)==Math.abs(x[j]-x[k]))||(x[j]==x[k]))return false; return true; } public static void nQueen(int m) ...{ n=m; int q[]=new int[n+1]; x=q; int stop=80;//允许随机放置的个数 while(!QueensLV(stop)); Backtrack(stop+1); //回溯 } public static void Backtrack(int t) ...{ if(flag)...{ if(t>n)...{ for(int i=1;i<=n;i++) System.out.print(x[i]+" "); flag=false; return; } else for(int i=1;i<=n;i++)...{ x[t]=i; if(Place(t))Backtrack(t+1); } } }}