import java.util.*; public class Solution { /** * * @param n int整型 * @return int整型 */ public int Nqueen (int n) { //map[i][j] == 1表示(i,j)已经放了皇后 int map[][] = new int[n][n] ; return help(map , 0) ; } //从索引为row的行开始,一共有多少种放置方法 public int help(int[][] map , int row) { if(row == map.length) return 1 ;//如果最后一层已经放置了皇后,那么这就是一种情况 int count = 0 ; //本行的每一个位置有多少种情况 for(int i = 0 ; i < map[0].length ; i ++) { if(!isOK(map , row , i)) continue ; map[row][i] = 1 ;//标记 //确定当前位置后,看其余的层数能房都找种 count += help(map , row + 1) ; map[row][i] = 0 ;//恢复现场,移除标记 } return count ; } //检查map[i][j]是否能够放置皇后 public boolean isOK(int[][] map , int row , int col) { for(int i = 0 ; i < row ; i ++) { for(int j = 0 ; j < map[0].length ; j ++) { //同一对角线,或同列的情况下 是否有已经放置的皇后 if((Math.abs(i - row) == Math.abs(j - col) && map[i][j] == 1) || ((j == col) && map[i][j] == 1)) { return false ; } } } return true ; } }