[52. N皇后 II
阿新 • • 發佈:2022-05-19
52. N皇后 II
n 皇后問題 研究的是如何將 n
個皇后放置在 n × n
的棋盤上,並且使皇后彼此之間不能相互攻擊。
給你一個整數 n
,返回 n 皇后問題 不同的解決方案的數量。
示例 1:
輸入:n = 4
輸出:2
解釋:如上圖所示,4 皇后問題存在兩個不同的解法。
示例 2:
輸入:n = 1
輸出:1
提示:
1 <= n <= 9
思路:
經典N皇后,沒有變化,
class Solution { public: int sum=0;//方案數 int totalNQueens(int n) { //N皇后 從返回解法變成了返回解決方案數量用'.'表示棋盤 'Q'表示棋子 vector<string>board(n,string(n,'.')); backtrack(board,0); return sum; } void backtrack(vector<string>&board,int i){ if(i==board.size()){ sum++; return; } for(int j=0;j<board.size();j++){ if(!isValid(board,i,j)){//如果該棋子放進去非法 就不選 continue; } //做選擇 board[i][j]='Q'; backtrack(board,i+1); //撤銷選擇 board[i][j]='.'; } } bool isValid(vector<string>&board,int row,int col){ int n=board.size(); //檢查列 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; } };