n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。
给定一个整数 n,返回 n 皇后不同的解决方案的数量。
示例:
输入: 4
输出: 2
解释: 4 皇后问题存在如下两个不同的解法。
[
[".Q…", // 解法 1
“…Q”,
“Q…”,
“…Q.”],
["…Q.", // 解法 2
“Q…”,
“…Q”,
“.Q…”]
]
代码
class Solution {char[][] chess;int cnt,res3=0;public int totalNQueens(int n) {cnt=n;chess=new char[n][n];for(int i=0;i<n;i++)//构建一个棋盘Arrays.fill(chess[i],'.');putNQueens(0);return res3;}public void putNQueens(int row) {if(row==cnt)//合法的摆放{res3++;return;}for(int i=0;i<cnt;i++){if(isNQueens(row,i)){chess[row][i]='Q';putNQueens(row+1);chess[row][i]='.';//回溯} }}public boolean isNQueens(int row,int col) {for(int i=1;row-i>=0;i++)if((col+i<cnt&&chess[row-i][col+i]=='Q')||(col-i>=0&&chess[row-i][col-i]=='Q')||chess[row-i][col]=='Q')//判断主对角线 副对角线 同一列 这3个方向有没有皇后return false;return true;}
}