import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
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--)
{
if (chessboard[i][j] == 'Q')
{
return false;
}
}
for (int i=row-1, j=col+1; i>=0 && j<=n-1; i--, j++)
{
if (chessboard[i][j] == 'Q')
{
return false;
}
}
return true;
}
}