class Test1 
...{
static int n;
static int x[];
public static void main(String[] args) 
...{
nQueen(8);
}
public static boolean QueensLV()
...{
int k=1;
int count=1;
while((k<=n)&&(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;//随机位置 保证x[k]!=0
}
if(count>0)x[k++]=j;
}
return (count>0);//count>0表示放置成功
}
public static void nQueen(int m)
...{
n=m;
int p[]=new int[n+1];
x=p; //反复调用随机放n个皇后的拉斯维加斯算法,直至放置成功
while(!QueensLV());
for(int i=1;i<=n;i++)
System.out.print(p[i]+" ");
System.out.println();
}
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;
}
}

while(!QueensLV());
for(int i=1;i<=n;i++)
System.out.print(p[i]+" ");
System.out.println();
}
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;
}
}
本文介绍了一种解决八皇后问题的方法,通过使用拉斯维加斯算法实现随机放置皇后,并确保皇后间不发生冲突。该算法能够有效找到至少一种可行解。
1231

被折叠的 条评论
为什么被折叠?



