Ich arbeite an einem N Queens-Programm, mit dem der Benutzer eine Königin-Konfiguration als String eingeben kann. Zum Beispiel: Wenn Sie dazu aufgefordert werden, könnte der Benutzer etwas wie Q .... Q ..... Q..Q eingeben. die, wenn sie angezeigt, wie ein Brett aussehen würde:Brauchen Sie Hilfe mit N Queens Programm (Überprüfung von Diagonalen)
Q . . .
. Q . .
. . . Q
. . Q .
Is not a solution!
Dieses Programm ist einfach, dass sie davon ausgeht, dass der Benutzer gültige Informationen eingeben werden. Ich möchte den Hauptteil des Programms arbeiten lassen, bevor ich zurückgehe und die Fehlerbehandlung hinzufüge.
Für diejenigen, die nicht mit dem N Queens Puzzle vertraut sind, haben Sie grundsätzlich N Queens auf einem N x N Board. Du hast eine Königin pro Reihe. Ein bestücktes Board ist eine Lösung, wenn keine zwei Queens die gleiche Zeile, Spalte oder Diagonale teilen.
Ich habe erfolgreich Prüfungen für die Zeilen und Spalten implementiert. Allerdings bin ich ratlos, wie ich alle Diagonalen überprüfen kann. Ich weiß, wie man die zwei Hauptdiagonalen überprüft, wie im Tic Tac Toe, aber ich kann wirklich nicht visualisieren, wie ich alle möglichen Diagonalen überprüfen kann?
Kann jemand Hilfe anbieten?
Hier ist mein Code:
import java.util.Scanner;
public class NQueens {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int qCount;
boolean solution = true;
System.out.println("Enter the String to test:");
board = sc.nextLine();
int boardLen = board.length();
int maxDim = (int) Math.sqrt(boardLen);
char[][] gameBoard = new char[maxDim][maxDim];
int counter = 0;
for (int i = 0; i < maxDim; i++)
{
for (int j = 0; j < maxDim; j++)
{
gameBoard[ i ][ j ] = board.charAt(counter);
counter++;
}
}
System.out.println("");
System.out.println("");
//check rows
for (int i = 0; i < maxDim; i++)
{
int queenCount = 0;
for (int j = 0; j < maxDim; j++)
{
if (gameBoard[ i ][ j ] == 'Q')
{
queenCount++;
if (queenCount > 1)
{
solution = false;
break;
}
}
}
}
// check columns
for (int i = 0; i < maxDim; i++)
{
int queenCount = 0;
for (int j = 0; j < maxDim; j++)
{
if (gameBoard[ j ][ i ] == 'Q')
{
queenCount++;
if (queenCount > 1)
{
solution = false;
break;
}
}
}
}
// print the board
for(int i = 0; i < maxDim; i++)
{
for (int j = 0; j < maxDim; j++)
{
System.out.print(gameBoard[ i ][ j ] + " ");
}
System.out.println();
}
// print whether or not the placement of queens is a solution
if (solution)
{
System.out.println("Is a solution!");
}
else
{
System.out.println("Is not a solution!");
}
}//end main
}//end class
Dank Lesen Sie mehr: Brauchen Sie Hilfe mit N Queens Programm
Also im Grunde, was Sie sagen, ist, dass ich den x- und y-Wert jeder Königin in einem anderen 2d-Array speichern und dann die Überprüfung durchführen kann, die Sie illustriert haben? – Codebug
@Will: Ja, speichern Sie einfach die x und y für jede Dame und machen Sie die Überprüfung für jedes Paar. –
Brauchen Sie hier keinen absoluten Wert? – shinzou