我正在做一个N皇后问题。现在我设置了电路板,以便所有的皇后都按照对角线设置:
Q * *
* Q *
* * Q
当电路板的N尺寸为4和5时,程序工作。但是当尺寸为6时,它似乎陷入了无限循环。
public void solve(){
while(d2() + d1() != 0){
int a = (int)Math.floor((Math.random() * (gridSize - 1)) + 0);
int temp1 = d1() + d2();
for(int row = 0; row < gridSize; row++){
for(int col = 0; col < gridSize; col++) {
if(isQueen(row,col)){
swapRows(a,row);}
int temp2 = d1() + d2();
if(temp1 < temp2){
swapRows(row,a);}
}
}
}printSolution();}//end solve
D1和D2跟踪对角线碰撞的数量。我使用Math.random()在两行之间创建一个随机交换,并检查它是否增加或减少了碰撞次数。关于为什么我的方法在gridSize为6或更大时陷入无限循环的任何想法?
由于