2012-03-27 12 views
-1

Ich arbeite an dem N-Queens-Problem und teste, was ich bis jetzt habe, um zu sehen, ob meine Logik korrekt ist. Meine Loop-Stopps hören auf zu spielen und gehen in eine Endlosschleife, nachdem das zweite Quintenstück so eingestellt wurde, dass es keinen Konflikt gibt.Unendliche Schleife in Java, Stacks und LinkedLists

Ich dachte nicht, dass ich mit meiner Logik eine Endlosschleife bekommen würde, das ist im Grunde: Push (1,1)

prüfen Konflikt

Wenn Konflikte, die Top-Königin einstellen, wenn sie nicht eingestellt werden kann, abspringen, stellen sie die neue Top-

wenn kein Konflikt und die Größe < 8, push (Größe + 1, 1) -die offensichtlich ein Konflikt

prüfen Konflikt wäre usw

public static boolean conflictCheck() { 
    QueenNode temp = head; 
    //walk through stack and check for conflicts 

    while(temp!=null) { 
     //if there is no next node, there is no conflict with it 
     if (temp.getNext() == null){ 
      System.out.println("No next node"); 
      if (queens.size() < 8) { 
       System.out.println("No problems"); 
       return false; 
      } 
     } 
     else if (temp.getRow() ==temp.getNext().getRow() || temp.getColumn() == temp.getNext().getColumn() || 
       diagonal(temp, temp.getNext())){ 
      System.out.println("There's a conflict"); 
      return true; 
     } 
    } 
    return false; 
} 

public static void playChess() { 
    System.out.println("Playing chess"); 
    if (conflictCheck()) { 
     if (head.getColumn() == 8) { 
      queens.pop(); 
     } 
     if (!queens.isEmpty()) { 
      System.out.println("Adjusting head"); 
      head.setColumn(head.getColumn()+1); 
      System.out.println("Head is now " + head.getRow() + ", " + head.getColumn()); 
      playChess(); 

     } 
    } 
    else if (!conflictCheck() && queens.size() < 8) { 
     System.out.println("Stack isn't full yet"); 
     queens.push(queens.size()+1,1); 
     playChess(); 
     } 
    else { 
     success= true; 
     System.out.println("Success"); 
     queens.viewPieces(); 
     return; 
    } 
} 

public static void main(String[] args) { 
    queens.push(1, 1); 
    queens.viewPieces(); 
    success = false; 
    playChess(); 
} 

}

Meine Ausgabe ist:

The stack 
1, 1 
End of stack 
Playing chess 
No next node 
No problems 
No next node 
No problems 
Stack isn't full yet 
Playing chess 
There's a conflict 
Adjusting head 
Head is now 2, 2 
Playing chess 
problem 
There's a conflict 
Adjusting head 
Head is now 2, 3 
Playing chess 
+0

Nach dem Einstellen der Kopf Königin zu 2,3 ​​war , sollte es zurück zu dem Teil der Schleife gehen, der KEIN KONFLIKT zeigt, aber Größe ist kleiner als 8. Welches ist, wenn ich auskommentiereSchach() – jackie

+0

fehlte eine zusätzliche else Anweisung, die wh feststellte de etwas war kein Konflikt. – jackie

Antwort

1

war ein extra else-Anweisung fehlt, der bestimmt, wenn etwas nicht ein Konflikt

Verwandte Themen