算法描述:
The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no two queens attack each other.
Given an integer n, return the number of distinct solutions to the n-queens puzzle.
Example:
Input: 4 Output: 2 Explanation: There are two distinct solutions to the 4-queens puzzle as shown below. [ [".Q..", // Solution 1 "...Q", "Q...", "..Q."], ["..Q.", // Solution 2 "Q...", "...Q", ".Q.."] ]
解题思路:回溯法求解。注意判断皇后合法条件。
int totalNQueens(int n) { vector<string> temp(n,string(n,'.')); int res = 0; backtracking(res, temp,0, n); return res; } void backtracking(int &res, vector<string>& temp, int row, int n){ if(row == n){ res++; return; } for(int col =0; col < n; col++){ temp[row][col] = 'Q'; if(isValid(temp, row, col, n)){ backtracking(res, temp, row+1, n); } temp[row][col] = '.'; } } bool isValid(vector<string>& temp, int row, int col, int n){ for(int i=0; i!= row; i++){ if(temp[i][col]=='Q') return false; } for(int i=row-1, j = col-1; i>=0 && j >=0; i--,j--){ if(temp[i][j]=='Q') return false; } for(int i=row-1, j=col+1; i>=0 && j<n; i--,j++){ if(temp[i][j]=='Q') return false; } return true; }