Sto lavorando a un programma N Queens che consentirà all'utente di immettere una configurazione Queen come stringa. Ad esempio, quando richiesto, l'utente potrebbe immettere qualcosa come Q .... Q ..... Q..Q. che quando visualizzato come una tavola sarebbe simile:Serve aiuto con il programma N Queens (controllo delle diagonali)
Q . . .
. Q . .
. . . Q
. . Q .
Is not a solution!
Questo programma è semplice in quanto si presume che l'utente dovrà inserire informazioni valide. Vorrei far funzionare la parte principale del programma prima di tornare indietro e aggiungere la gestione degli errori.
Per coloro che non hanno familiarità con il puzzle delle N Queens, in pratica si hanno N Queens su una scheda N x N. Hai una regina per fila. Una scheda popolata è una soluzione se due regine non condividono la stessa riga, colonna o diagonale.
Ho implementato correttamente i controlli per righe e colonne. Tuttavia, sono perplesso su come posso controllare tutte le diagonali. So come controllare le due diagonali principali, come nel tic tac toe, ma non riesco davvero a visualizzare come posso controllare tutte le possibili diagonali?
Qualcuno può offrire aiuto?
Ecco il mio codice:
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
Grazie Per saperne di più: bisogno di aiuto con N Programma Queens
Quindi in sostanza quello che stai dicendo è che posso memorizzare il valore xey di ogni regina in un altro array 2d e quindi eseguire il controllo che hai illustrato? – Codebug
@Will: Sì, è sufficiente memorizzare xey per ogni regina e fare il controllo per ogni coppia. –
Non hai bisogno di un valore assoluto qui? – shinzou