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
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
fehlte eine zusätzliche else Anweisung, die wh feststellte de etwas war kein Konflikt. – jackie