vector<vector<string>> ans;
void addtoans(vector<vector<int>> &board, int n){
vector<string> row;
string s = "";
int i,j;
for(i = 0;i < n;i++){
for(j = 0;j < n;j++){
if(board[i][j] == 1)
s = s + 'Q';
else
s = s + '.';
}
row.push_back(s);
s = "";
}
ans.push_back(row);
return;
}
bool issafe(vector<vector<int>> &board, int row, int col, int n){
int i,j;
for(i = 0;i < row;i++)
if(board[i][col] == 1)
return false;
int x = row, y = col;
while(x >= 0 && y >= 0){
if(board[x][y] == 1)
return false;
x--; y--;
}
x = row; y = col;
while(x >= 0 && y < n){
if(board[x][y] = 1)
return false;
x--; y++;
}
return true;
}
bool solveNqueen(vector<vector<int>> &board, int i,int n){
if(i == n)
return true;
int j;
for(j = 0;j < n;j++){
if(issafe(board,i,j,n)){
board[i][j] = 1;
bool nextqueenpos = solveNqueen(board, i+1, n);
if(nextqueenpos)
return true;
board[i][j] = 0;
}
}
return false;
}
vector<vector<string>> solveNQueens(int n) {
int i, j;
for(i = 0;i < n;i++){
vector<vector<int>>board(n,vector<int>(n,0));
board[0][i] = 1;
bool ispossible = solveNqueen(board,1,n);
if(ispossible){
addtoans(board,n);
}
}
return ans;
}
N皇后问题:n皇后难题是将n个皇后放置在n×n棋盘上的问题,这样就不会有两个皇后互相攻击。 这是我在leetcode上编写的代码。我的输出是[],这是错误的。我的代码返回空白向量。请帮助我找到代码中的错误。
答案 0 :(得分:0)
很难想象确切的问题输入和输出类型,但是,假设第一个皇后的位置是(x = 0,y = 0),则可以将下一个皇后放置在(x = x + 1,y = y + 2)或(x = x + 2,y = y + 1)。如果x或y值大于n,则停止。