Java-программа 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();
  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 или больше?

Спасибо

0 ответов

Другие вопросы по тегам