Я работаю над программой N Queens, которая позволит пользователю вводить конфигурацию Queen в виде строки.Например, при появлении запроса пользователь может ввести что-то вроде Q .... Q ..... Q..Q.который при отображении в виде доски будет выглядеть так:
Q . . .
. Q . .
. . . Q
. . Q .
Is not a solution!
Эта программа проста в том смысле, что она предполагает, что пользователь введет правильную информацию.Я хотел бы, чтобы основная часть программы работала, прежде чем я вернусь и добавлю обработку ошибок.
Для тех, кто не знаком с загадкой N Queens, в основном у вас есть N Queens на доске N x N.У вас есть одна королева на ряд.Заполненная доска - это решение, если никакие две королевы не имеют одинаковую строку, столбец или диагональ.
Я успешно реализовал проверки строк и столбцов.Тем не менее, я озадачен тем, как я могу проверить все диагонали.Я знаю, как проверить две основные диагонали, как в крестики-нолики, но я действительно не могу представить, как я могу проверить все возможные диагонали?
Кто-нибудь может предложить помощь?
Вотмой код:
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
Спасибо Подробнее: Нужна помощь с программой N Queens