Java代码实现
package com.company;
import static java.lang.System.in;
import static java.lang.System.out;
import java.util.*;
public class Main {
public static ArrayList<char[][]> res;
public static void fillBoard(char[][] board){
for (int i = 0; i < board.length; i++) {
Arrays.fill(board[i], '.');
}
}
public static char[][] deepCopyBoard(char[][] board){
char[][] newBoard = new char[board.length][board.length];
for (int i = 0; i < board.length; i++){
for (int j = 0; j < board.length; j++){
newBoard[i][j] = board[i][j];
}
}
return newBoard;
}
public static void outputBoardResults(boolean printAllBoards){
out.println("Total number of results: " + res.size());
if (printAllBoards){
for (char[][] board : res) {
out.println("---------------------");
for (int i = 0; i < board.length; i++) {
out.println(board[i]);
}
out.println("---------------------");
}
}
}
public static ArrayList<char[][]> solveNQueens(int n){
res = new ArrayList<>();
char[][] board = new char[n][n];
fillBoard(board);
backtrack(board, 0);
return res;
}
public static void backtrack(char[][] board, int row){
if (row == board.length){
res.add(deepCopyBoard(board));
return;
}
int n = board[row].length;
for (int col = 0; col < n; col++) {
if (!isValid(board, row, col))
continue;
board[row][col] = 'Q';
backtrack(board, row + 1);
board[row][col] = '.';
}
}
public static boolean isValid(char[][] board, int row, int col){
int n = board.length;
for (int i = 0; i < row; i++) {
if (board[i][col] == 'Q')
return false;
}
for (int i = row - 1, j = col + 1; i >= 0 && j < n; i--, j++){
if (board[i][j] == 'Q')
return false;
}
for (int i = row - 1, j = col - 1; i >=0 && j >= 0; i--, j--){
if (board[i][j] == 'Q')
return false;
}
return true;
}
public static void main(String[] args) {
solveNQueens(8);
outputBoardResults(true);
}
}
结果输出
Total number of results: 92
---------------------
Q.......
....Q...
.......Q
.....Q..
..Q.....
......Q.
.Q......
...Q....
---------------------
---------------------
Q.......
.....Q..
.......Q
..Q.....
......Q.
...Q....
.Q......
....Q...
---------------------
---------------------
Q.......
......Q.
...Q....
.....Q..
.......Q
.Q......
....Q...
..Q.....
---------------------
---------------------
Q.......
......Q.
....Q...
.......Q
.Q......
...Q....
.....Q..
..Q.....
---------------------
---------------------
.Q......
...Q....
.....Q..
.......Q
..Q.....
Q.......
......Q.
....Q...
---------------------
---------------------
.Q......
....Q...
......Q.
Q.......
..Q.....
.......Q
.....Q..
...Q....
---------------------
---------------------
.Q......
....Q...
......Q.
...Q....
Q.......
.......Q
.....Q..
..Q.....
---------------------
---------------------
.Q......
.....Q..
Q.......
......Q.
...Q....
.......Q
..Q.....
....Q...
---------------------
---------------------
.Q......
.....Q..
.......Q
..Q.....
Q.......
...Q....
......Q.
....Q...
---------------------
---------------------
.Q......
......Q.
..Q.....
.....Q..
.......Q
....Q...
Q.......
...Q....
---------------------
---------------------
.Q......
......Q.
....Q...
.......Q
Q.......
...Q....
.....Q..
..Q.....
---------------------
---------------------
.Q......
.......Q
.....Q..
Q.......
..Q.....
....Q...
......Q.
...Q....
---------------------
---------------------
..Q.....
Q.......
......Q.
....Q...
.......Q
.Q......
...Q....
.....Q..
---------------------
---------------------
..Q.....
....Q...
.Q......
.......Q
Q.......
......Q.
...Q....
.....Q..
---------------------
---------------------
..Q.....
....Q...
.Q......
.......Q
.....Q..
...Q....
......Q.
Q.......
---------------------
---------------------
..Q.....
....Q...
......Q.
Q.......
...Q....
.Q......
.......Q
.....Q..
---------------------
---------------------
..Q.....
....Q...
.......Q
...Q....
Q.......
......Q.
.Q......
.....Q..
---------------------
---------------------
..Q.....
.....Q..
.Q......
....Q...
.......Q
Q.......
......Q.
...Q....
---------------------
---------------------
..Q.....
.....Q..
.Q......
......Q.
Q.......
...Q....
.......Q
....Q...
---------------------
---------------------
..Q.....
.....Q..
.Q......
......Q.
....Q...
Q.......
.......Q
...Q....
---------------------
---------------------
..Q.....
.....Q..
...Q....
Q.......
.......Q
....Q...
......Q.
.Q......
---------------------
---------------------
..Q.....
.....Q..
...Q....
.Q......
.......Q
....Q...
......Q.
Q.......
---------------------
---------------------
..Q.....
.....Q..
.......Q
Q.......
...Q....
......Q.
....Q...
.Q......
---------------------
---------------------
..Q.....
.....Q..
.......Q
Q.......
....Q...
......Q.
.Q......
...Q....
---------------------
---------------------
..Q.....
.....Q..
.......Q
.Q......
...Q....
Q.......
......Q.
....Q...
---------------------
---------------------
..Q.....
......Q.
.Q......
.......Q
....Q...
Q.......
...Q....
.....Q..
---------------------
---------------------
..Q.....
......Q.
.Q......
.......Q
.....Q..
...Q....
Q.......
....Q...
---------------------
---------------------
..Q.....
.......Q
...Q....
......Q.
Q.......
.....Q..
.Q......
....Q...
---------------------
---------------------
...Q....
Q.......
....Q...
.......Q
.Q......
......Q.
..Q.....
.....Q..
---------------------
---------------------
...Q....
Q.......
....Q...
.......Q
.....Q..
..Q.....
......Q.
.Q......
---------------------
---------------------
...Q....
.Q......
....Q...
.......Q
.....Q..
Q.......
..Q.....
......Q.
---------------------
---------------------
...Q....
.Q......
......Q.
..Q.....
.....Q..
.......Q
Q.......
....Q...
---------------------
---------------------
...Q....
.Q......
......Q.
..Q.....
.....Q..
.......Q
....Q...
Q.......
---------------------
---------------------
...Q....
.Q......
......Q.
....Q...
Q.......
.......Q
.....Q..
..Q.....
---------------------
---------------------
...Q....
.Q......
.......Q
....Q...
......Q.
Q.......
..Q.....
.....Q..
---------------------
---------------------
...Q....
.Q......
.......Q
.....Q..
Q.......
..Q.....
....Q...
......Q.
---------------------
---------------------
...Q....
.....Q..
Q.......
....Q...
.Q......
.......Q
..Q.....
......Q.
---------------------
---------------------
...Q....
.....Q..
.......Q
.Q......
......Q.
Q.......
..Q.....
....Q...
---------------------
---------------------
...Q....
.....Q..
.......Q
..Q.....
Q.......
......Q.
....Q...
.Q......
---------------------
---------------------
...Q....
......Q.
Q.......
.......Q
....Q...
.Q......
.....Q..
..Q.....
---------------------
---------------------
...Q....
......Q.
..Q.....
.......Q
.Q......
....Q...
Q.......
.....Q..
---------------------
---------------------
...Q....
......Q.
....Q...
.Q......
.....Q..
Q.......
..Q.....
.......Q
---------------------
---------------------
...Q....
......Q.
....Q...
..Q.....
Q.......
.....Q..
.......Q
.Q......
---------------------
---------------------
...Q....
.......Q
Q.......
..Q.....
.....Q..
.Q......
......Q.
....Q...
---------------------
---------------------
...Q....
.......Q
Q.......
....Q...
......Q.
.Q......
.....Q..
..Q.....
---------------------
---------------------
...Q....
.......Q
....Q...
..Q.....
Q.......
......Q.
.Q......
.....Q..
---------------------
---------------------
....Q...
Q.......
...Q....
.....Q..
.......Q
.Q......
......Q.
..Q.....
---------------------
---------------------
....Q...
Q.......
.......Q
...Q....
.Q......
......Q.
..Q.....
.....Q..
---------------------
---------------------
....Q...
Q.......
.......Q
.....Q..
..Q.....
......Q.
.Q......
...Q....
---------------------
---------------------
....Q...
.Q......
...Q....
.....Q..
.......Q
..Q.....
Q.......
......Q.
---------------------
---------------------
....Q...
.Q......
...Q....
......Q.
..Q.....
.......Q
.....Q..
Q.......
---------------------
---------------------
....Q...
.Q......
.....Q..
Q.......
......Q.
...Q....
.......Q
..Q.....
---------------------
---------------------
....Q...
.Q......
.......Q
Q.......
...Q....
......Q.
..Q.....
.....Q..
---------------------
---------------------
....Q...
..Q.....
Q.......
.....Q..
.......Q
.Q......
...Q....
......Q.
---------------------
---------------------
....Q...
..Q.....
Q.......
......Q.
.Q......
.......Q
.....Q..
...Q....
---------------------
---------------------
....Q...
..Q.....
.......Q
...Q....
......Q.
Q.......
.....Q..
.Q......
---------------------
---------------------
....Q...
......Q.
Q.......
..Q.....
.......Q
.....Q..
...Q....
.Q......
---------------------
---------------------
....Q...
......Q.
Q.......
...Q....
.Q......
.......Q
.....Q..
..Q.....
---------------------
---------------------
....Q...
......Q.
.Q......
...Q....
.......Q
Q.......
..Q.....
.....Q..
---------------------
---------------------
....Q...
......Q.
.Q......
.....Q..
..Q.....
Q.......
...Q....
.......Q
---------------------
---------------------
....Q...
......Q.
.Q......
.....Q..
..Q.....
Q.......
.......Q
...Q....
---------------------
---------------------
....Q...
......Q.
...Q....
Q.......
..Q.....
.......Q
.....Q..
.Q......
---------------------
---------------------
....Q...
.......Q
...Q....
Q.......
..Q.....
.....Q..
.Q......
......Q.
---------------------
---------------------
....Q...
.......Q
...Q....
Q.......
......Q.
.Q......
.....Q..
..Q.....
---------------------
---------------------
.....Q..
Q.......
....Q...
.Q......
.......Q
..Q.....
......Q.
...Q....
---------------------
---------------------
.....Q..
.Q......
......Q.
Q.......
..Q.....
....Q...
.......Q
...Q....
---------------------
---------------------
.....Q..
.Q......
......Q.
Q.......
...Q....
.......Q
....Q...
..Q.....
---------------------
---------------------
.....Q..
..Q.....
Q.......
......Q.
....Q...
.......Q
.Q......
...Q....
---------------------
---------------------
.....Q..
..Q.....
Q.......
.......Q
...Q....
.Q......
......Q.
....Q...
---------------------
---------------------
.....Q..
..Q.....
Q.......
.......Q
....Q...
.Q......
...Q....
......Q.
---------------------
---------------------
.....Q..
..Q.....
....Q...
......Q.
Q.......
...Q....
.Q......
.......Q
---------------------
---------------------
.....Q..
..Q.....
....Q...
.......Q
Q.......
...Q....
.Q......
......Q.
---------------------
---------------------
.....Q..
..Q.....
......Q.
.Q......
...Q....
.......Q
Q.......
....Q...
---------------------
---------------------
.....Q..
..Q.....
......Q.
.Q......
.......Q
....Q...
Q.......
...Q....
---------------------
---------------------
.....Q..
..Q.....
......Q.
...Q....
Q.......
.......Q
.Q......
....Q...
---------------------
---------------------
.....Q..
...Q....
Q.......
....Q...
.......Q
.Q......
......Q.
..Q.....
---------------------
---------------------
.....Q..
...Q....
.Q......
.......Q
....Q...
......Q.
Q.......
..Q.....
---------------------
---------------------
.....Q..
...Q....
......Q.
Q.......
..Q.....
....Q...
.Q......
.......Q
---------------------
---------------------
.....Q..
...Q....
......Q.
Q.......
.......Q
.Q......
....Q...
..Q.....
---------------------
---------------------
.....Q..
.......Q
.Q......
...Q....
Q.......
......Q.
....Q...
..Q.....
---------------------
---------------------
......Q.
Q.......
..Q.....
.......Q
.....Q..
...Q....
.Q......
....Q...
---------------------
---------------------
......Q.
.Q......
...Q....
Q.......
.......Q
....Q...
..Q.....
.....Q..
---------------------
---------------------
......Q.
.Q......
.....Q..
..Q.....
Q.......
...Q....
.......Q
....Q...
---------------------
---------------------
......Q.
..Q.....
Q.......
.....Q..
.......Q
....Q...
.Q......
...Q....
---------------------
---------------------
......Q.
..Q.....
.......Q
.Q......
....Q...
Q.......
.....Q..
...Q....
---------------------
---------------------
......Q.
...Q....
.Q......
....Q...
.......Q
Q.......
..Q.....
.....Q..
---------------------
---------------------
......Q.
...Q....
.Q......
.......Q
.....Q..
Q.......
..Q.....
....Q...
---------------------
---------------------
......Q.
....Q...
..Q.....
Q.......
.....Q..
.......Q
.Q......
...Q....
---------------------
---------------------
.......Q
.Q......
...Q....
Q.......
......Q.
....Q...
..Q.....
.....Q..
---------------------
---------------------
.......Q
.Q......
....Q...
..Q.....
Q.......
......Q.
...Q....
.....Q..
---------------------
---------------------
.......Q
..Q.....
Q.......
.....Q..
.Q......
....Q...
......Q.
...Q....
---------------------
---------------------
.......Q
...Q....
Q.......
..Q.....
.....Q..
.Q......
......Q.
....Q...
---------------------
Process finished with exit code 0
如果你认为对你有用,关注我的微信公众号支持我一下吧!~