import java.util.*; public class Solution { /** * * @param n int整型 the n * @return int整型 */ static int cnt = 0; public int Nqueen (int n) { // write code here int[][] board = new int[n][n]; cnt = 0; dfs(board, 0, n); return cnt; } public void dfs(int[][] board, int i, int n) { if (i >= n) { cnt++; return; } for (int j = 0; j < n; j++) { if (isValid(board, i, j)) { // 放棋子 board[i][j] = 1; dfs(board, i + 1, n); // 复原 board[i][j] = 0; } } } // 判断皇后摆在(x,y)是否合法 public boolean isValid(int[][] board, int x, int y) { int n = board.length; for (int i = 0; i < n; i++) { if (board[i][y] == 1) { return false; } } for (int j = 0; j < n; j++) { if (board[x][j] == 1) { return false; } } for (int i = 1; i <= n; i++) { if (x - i >= 0 && y - i >= 0 && board[x - i][y - i] == 1) { return false; } if (x + i < n && y - i >= 0 && board[x + i][y - i] == 1) { return false; } if (x - i >= 0 && y + i < n && board[x - i][y + i] == 1) { return false; } if (x + i < n && y + i < n && board[x + i][y + i] == 1) { return false; } } return true; } // 打印棋盘,以供检查 public void printBoard(int[][] board,int n) { for (int k = 0; k < n; k++) { for (int l = 0; l < n; l++) { System.out.print(board[k][l] + " "); } System.out.println(); } } }