Java не хранит матрицу символов в списке массивов - PullRequest
0 голосов
/ 04 февраля 2019

Я пытаюсь решить знаменитую проблему n-ферзей.И я пытаюсь вести учет всех возможных решений для платы размером NxN.

Для этого используется ArrayList для хранения каждого найденного решения платы.Я мог бы проверить, что код находит решения и сохраняет их в списке массивов.Однако при проверке окончательного списка массивов он просто содержит матрицу символов в том виде, в каком она была инициализирована.

Может кто-нибудь взглянуть и помочь мне выяснить, какого чёрта Java неправильно хранит матрицу символов?

Спасибо!код ниже:

public static ArrayList<char[][]> nQueens(int n)
{
    char board[][] = new char[n][n];

    for(int i = 0; i < n; i++)
        for(int j = 0; j < n; j++)
            board[i][j] = '-';

    ArrayList<char[][]> solution = new ArrayList<char[][]>();
    nQueensHelper(board, 0, n, solution);
    return solution;
}

public static void nQueensHelper(char [][] board, int row, int N, ArrayList<char[][]> solution)
{
    printBoard(board, N);
    System.out.println();
    if(row == N)
    {
        System.out.println("solution");
        printBoard(board, N);
        System.out.println("**\n");

        solution.add(board);
        return;
    }

    for(int col = 0; col < N; col++)
    {
        if(checker(board, row, col, N))
        {
            board[row][col] = 'q';

            nQueensHelper(board, row+1, N, solution);
            board[row][col] = '-';
        }

    }
}

public static boolean checker(char [][] board, int row, int col, int N)
{
    //check diagonal - upper-left to bottom-right
    for(int i = row, j = col; i >= 0 && j >= 0; i--,j--)
        if(board[i][j] == 'q')
            return false;
    //check column
    for(int i = row; i >= 0; i--)
        if(board[i][col] == 'q')
            return false;
    //check diagonal - upper-right to bottom-left
    for(int i = row, j = col; i >= 0 && j < N; i--,j++)
        if(board[i][j] == 'q')
            return false;

    return true;
}

public static void printBoard(char board[][], int n)
{
    for(int i = 0; i < n; i++){
        for(int j = 0; j < n; j++)
        {
            System.out.print(board[i][j]);
        }
        System.out.println();
    }
}

// основной тест

public static void main(String [] args) throws FileNotFoundException, IOException, ParseException, ScriptException
{

    ArrayList<char[][]> solution = nQueens(4);
    System.out.println(solution);

}

...