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);
}
}
}
}
... {
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);
}
}
}
}