N Queens Java程序陷入无限循环

N Queens Java程序陷入无限循环,java,multidimensional-array,while-loop,infinite-loop,n-queens,Java,Multidimensional Array,While Loop,Infinite Loop,N Queens,我在做一个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(); f

我在做一个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    
public void solve(){
而(d2()+d1()!=0){
inta=(int)Math.floor((Math.random()*(gridSize-1))+0);
int temp1=d1()+d2();
对于(int row=0;row
D1和D2记录对角碰撞的次数。我使用Math.random()在两行之间创建了一个随机交换,并检查它是否增加或减少了冲突的数量。你知道为什么我的方法在gridSize为6或更大时陷入无限循环吗


谢谢

因为您得到了一个无限循环,如果我们知道您的条件(d1和d2)中发生了什么,这会有所帮助。另外,正如我昨天在你的问题中提到的,我确实就这个问题写了一个详细的系列文章,共分三部分,其中包括三种不同的解决方法。如果你阅读博客文章,你可能会了解一些你的方法。是的,我看到了你的三种方法,但它只包含了一个一维数组。您的算法如何处理2D数组?将n皇后问题表示为2D数组会增加问题的复杂性。将问题表示为一个一维数组,其中每个数组位置都是一列,每个位置的值都是一行,这样更容易,也更有效。这样做还可以消除在同一列中有多个皇后的可能性,从而最大限度地降低计算复杂度。我相信,如果您使用调试器逐步解决这个问题,您会很快发现问题。