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;}
}