Pracuję nad programem N Queens, który pozwoli użytkownikowi wprowadzić konfigurację Queen jako ciąg. Na przykład po wyświetleniu monitu użytkownik może wpisać coś w stylu Q .... Q ..... Q..Q. która wyświetlana jako tablica będzie wyglądać następująco:Potrzebujesz pomocy z programem N Queens (sprawdzanie przekątnych)
Q . . .
. Q . .
. . . Q
. . Q .
Is not a solution!
Ten program jest prosty, ponieważ zakłada, że użytkownik wprowadzi prawidłowe informacje. Chciałbym, aby główna część programu działała, zanim wrócę i dodam obsługę błędów.
Dla tych, którzy nie są zaznajomieni z układanką N Queens, w zasadzie macie N Queens na tablicy N x N. Masz jedną królową w rzędzie. Wypełniona plansza jest rozwiązaniem, jeśli żadna z dwóch królowych nie ma tego samego rzędu, kolumny lub przekątnej.
Pomyślnie zaimplementowałem sprawdzanie wierszy i kolumn. Jednak jestem zaskoczony, w jaki sposób mogę sprawdzić wszystkie przekątne. Wiem, jak sprawdzić dwie główne przekątne, np. W kółko i krzyżyk, ale naprawdę nie mogę sobie wyobrazić, jak mogę sprawdzić wszystkie możliwe przekątne?
Czy ktoś może zaoferować pomoc?
Oto mój kod:
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
Dzięki Więcej: Potrzebujesz pomocy z N Queens Program
W gruncie rzeczy mówisz, że mogę przechowywać wartości xiy każdej królowej w innej tablicy 2d, a następnie wykonać test, który zilustrowałeś? – Codebug
@Will: Tak, po prostu zapisz X i Y dla każdej królowej i wykonaj sprawdzenie dla każdej pary. –
Czy nie potrzebujesz tutaj bezwzględnej wartości? – shinzou