编辑代码

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
 * @author WUHAO
 * @create 2022-11-30 20:31
 */
public class Main
{
    private static List<List<String>> res= new ArrayList<>();
    public static void main(String[] args)
    {
        solveNQueens(3);
        System.out.println("解的个数:"+res.size());
    }
    public static void solveNQueens(int n)
    {
        char[][] chessboard = new char[n][n];
        for (char[] c : chessboard)
        {
            Arrays.fill(c, '.');
        }
        backTrack(n, 0, chessboard);
    }
    public static void backTrack(int n, int row, char[][] chessboard)
    {
        if (row == n)
        {
            res.add(Array2List(chessboard));
            return;
        }
        for (int col = 0;col < n; ++col)
        {
            if (isValid (row, col, n, chessboard))
            {
                chessboard[row][col] = 'Q';
                backTrack(n, row+1, chessboard);
                chessboard[row][col] = '.';
            }
        }
    }
    public static List Array2List(char[][] chessboard)
    {
        List<String> list = new ArrayList<>();
        for (char[] c : chessboard)
        {
            list.add(String.copyValueOf(c));
        }
        return list;
    }
    public static boolean isValid(int row, int col, int n, char[][] chessboard)
    {

        for (int i=0; i<row; ++i) //列
        {
            if (chessboard[i][col] == 'Q')
            {
                return false;
            }
        }
        for (int i=row-1, j=col-1; i>=0 && j>=0; i--, j--) //45度
        {
            if (chessboard[i][j] == 'Q')
            {
                return false;
            }
        }
        for (int i=row-1, j=col+1; i>=0 && j<=n-1; i--, j++)//135度
        {
            if (chessboard[i][j] == 'Q')
            {
                return false;
            }
        }
        return true;
    }
}