Графическое отображение решений для задачи N ферзей в java - PullRequest
0 голосов
/ 26 мая 2020

У меня есть рабочий код, который вы можете видеть ниже, мне просто нужен кто-то, чтобы помочь мне, как разрешить пользователю вставлять количество ферзей в новое окно, а затем программа должна отображать все решения в новом окне, которое будет отображаться графически шахматная доска и ферзи.


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(); 
} 
} 

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...