У меня есть рабочий код, который вы можете видеть ниже, мне просто нужен кто-то, чтобы помочь мне, как разрешить пользователю вставлять количество ферзей в новое окно, а затем программа должна отображать все решения в новом окне, которое будет отображаться графически шахматная доска и ферзи.
Java program to solve N Queen
Problem using backtracking
public class GfG
{
static int N = 2;
static int k = 1;
/* A utility function to print solution */
static void printSolution(int board[][])
{
System.out.printf("%d-\n", k++);
for (int i = 0; i < N; i++)
{
for (int j = 0; j < N; j++)
System.out.printf(" %d ", board[i][j]);
System.out.printf("\n");
}
System.out.printf("\n");
}
Вспомогательная функция для проверки возможности
разместить ферзя на доске [row] [col]. Обратите внимание, что эта функция
вызывается, когда королевы "col"
уже помещены в столбцы от 0 до col -1.
Таким образом, нам нужно проверить только левую сторону на наличие
атакующих ферзей
static boolean isSafe(int board[][], int row, int col)
{
int i, j;
/* Check this row on left side */
for (i = 0; i < col; i++)
if (board[row][i] == 1)
return false;
/* Check upper diagonal on left side */
for (i = row, j = col; i >= 0 && j >= 0; i--, j--)
if (board[i][j] == 1)
return false;
/* Check lower diagonal on left side */
for (i = row, j = col; j >= 0 && i < N; i++, j--)
if (board[i][j] == 1)
return false;
return true;
}
Рекурсивная служебная функция
для решения задачи N Queen
static boolean solveNQUtil(int board[][], int col)
{
/* base case: If all queens are placed
then return true */
if (col == N)
{
printSolution(board);
return true;
}
/* Consider this column and try placing
this queen in all rows one by one */
boolean res = false;
for (int i = 0; i < N; i++)
{
/* Check if queen can be placed on
board[i][col] */
if ( isSafe(board, i, col) )
{
/* Place this queen in board[i][col] */
board[i][col] = 1;
// Make result true if any placement
// is possible
res = solveNQUtil(board, col + 1) || res;
/* If placing queen in board[i][col]
doesn't lead to a solution, then
remove queen from board[i][col] */
board[i][col] = 0; // BACKTRACK
}
}
/* If queen can not be place in any row in
this column col then return false */
return res;
}
Эта функция решает проблему N Queen с использованием
Backtracking. В основном для решения проблемы
используется resolveNQUtil (). Он возвращает false, если ферзи
не могут быть размещены, в противном случае возвращает true, а
печатает размещение ферзей в виде единиц.
Обратите внимание, что может быть более одного
решений, эта функция выводит одно
возможных решений.
static void solveNQ()
{
int board[][] = new int[N][N];
if (solveNQUtil(board, 0) == false)
{
System.out.printf("Solution does not exist");
return ;
}
return ;
}
// Driver code
public static void main(String[] args)
{
solveNQ();
}
}