classSolution{public:
vector<vector<string>> res;
vector<string> board;boolcheck(int n ,int x,int y){for(int i =0; i < x; i++){// 同一列if(board[i][y]=='Q')returnfalse;}for(int i = x-1, j = y+1; i >=0&& j < n; i--,j++){if(board[i][j]=='Q')returnfalse;}for(int i = x-1, j = y-1; i >=0&& j >=0; i--,j--){if(board[i][j]=='Q')returnfalse;}returntrue;}
vector<vector<string>>solveNQueens(int n){
board =move(vector<string>(n,string(n,'.')));backtrack(n,0);return res;}voidbacktrack(int n,int x){// x表示第几行if(x == n){
res.push_back(board);return;}for(int i =0; i < n; i++){if(!check(n, x, i)){continue;}
board[x][i]='Q';backtrack(n, x+1);
board[x][i]='.';}}};
代码(8.24 部分看解析)
classSolution{public:int res;intNqueen(int n){
res =0;
vector<vector<bool>>grid(n,vector<bool>(n,false));backtrack(grid, n,0);return res;}voidbacktrack(vector<vector<bool>> grid,int n,int x){if(x == n){
res++;return;}for(int i =0; i < n; i++){if(check(grid, x, i, n)){
grid[x][i]=true;backtrack(grid, n, x+1);
grid[x][i]=false;}}}boolcheck(vector<vector<bool>> grid,int x,int y,int n){for(int i =0; i < x; i++){if(grid[i][y])returnfalse;}for(int i = x -1, j = y -1; i >=0&& j >=0; i--, j--){if(grid[i][j])returnfalse;}for(int i = x -1, j = y +1; i >=0&& j < n; i--, j++){if(grid[i][j])returnfalse;}returntrue;}};
代码(9.21 三刷自解)
classSolution{public:
vector<vector<string>> res;
vector<string> map;
vector<vector<string>>solveNQueens(int n){
map =vector<string>(n,string(n,'.'));backtrack(map, n,0);return res;}voidbacktrack(vector<string>& map,int n,int x){if(x == n){
res.emplace_back(map);return;}for(int i =0; i < n; i++){if(!check(x, i, n))continue;
map[x][i]='Q';backtrack(map, n, x+1);
map[x][i]='.';}}boolcheck(int x,int y,int n){for(int i =0; i < x; i++){if(map[i][y]=='Q')returnfalse;}for(int i =0; i < y; i++){if(map[x][i]=='Q')returnfalse;}for(int i = x-1, j = y-1; i >=0&& j >=0; i--, j--){if(map[i][j]=='Q')returnfalse;}for(int i = x-1, j = y+1; i >=0&& j < n; i--, j++){if(map[i][j]=='Q')returnfalse;}returntrue;}};