我的NQueens问题代码有什么错误?

时间:2020-05-16 18:40:19

标签: c++ c++11 n-queens

    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上编写的代码。我的输出是[],这是错误的。我的代码返回空白向量。请帮助我找到代码中的错误。

1 个答案:

答案 0 :(得分:0)

很难想象确切的问题输入和输出类型,但是,假设第一个皇后的位置是(x = 0,y = 0),则可以将下一个皇后放置在(x = x + 1,y = y + 2)或(x = x + 2,y = y + 1)。如果x或y值大于n,则停止。