Leetcode 51. N皇后

Posted randyniu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode 51. N皇后相关的知识,希望对你有一定的参考价值。

class Solution {
public:
    //最后返回的结果
    vector<vector<string>> ans;
    
    // 记录路径的信息,path的索引表示的第几列,因此对应的值就是第几行,这样才可以确定一个唯一的二维坐标
    vector<int> path;
    
    // 标志记录信息
    vector<bool> row;
    vector<bool>  diagonal ;
    vector<bool>  back_diagonal ;
    
    // idx表示现在走的是那一列,n表示总共多少列
    void dfs(int idx, int n)
    {
        //递归的终止条件 
        if(idx >= n)
        {
            vector<string> chess;
            //有n行
            for(int i=0;i<n;++i)
            {
                string tmp  = "";
                //有n列
                for(int j=0;j<n;++j)
                {
                    if(path[j] == i)
                    {
                        tmp += "Q";
                    }
                    else
                    {
                        tmp += ".";
                    }
                }
                chess.push_back(tmp);
            }
            ans.push_back(chess);
            return;
        }
        
        //idx表示当前走的是第几列  递归的主要部分
        for(int i=0;i<n;++i)
        {
            if(!row[i] && !diagonal[idx+i] && !back_diagonal[idx-i + n-1])
            {
                path[idx] = i;
                //第i行被占据了
                row[i] = true;
                diagonal[idx+i] = true;
                back_diagonal[idx-i + n-1] =  true;
                dfs(idx+1, n); 
                row[i] = false;
                diagonal[idx+i] = false;
                back_diagonal[idx-i + n-1] =  false;
            }
        } 
    }
    
    
    vector<vector<string>> solveNQueens(int n) {
        ans.clear();
        
        path.resize(n,-1);
        row.resize(n, false);
        diagonal.resize((2*n-1), false);
        back_diagonal.resize((2*n-1), false);
        
        dfs(0, n);
        
        return ans;
    }
};

 

以上是关于Leetcode 51. N皇后的主要内容,如果未能解决你的问题,请参考以下文章

[LeetCode] 51. N皇后

leetcode 51. N-Queens N 皇后(困难)

leetcode| 51. N皇后问题

Leetcode No.51 N皇后

n皇后问题leetcode-51. N-Queens

Leetcode刷题Python51. N 皇后