题解 | #N皇后问题#

N皇后问题

http://www.nowcoder.com/practice/c76408782512486d91eea181107293b6

class Solution {//参考大佬的Java代码,C++实现
public:
    /**
     * 
     * @param n int整型 the n
     * @return int整型
     */
    int Nqueen(int n) {//递归回溯
        // write code here
        vector<string> rst;
        vector<vector<char>> chess(n,vector<char>(n,'Z'));
        solve(rst, chess, 0, n);
        int len = rst.size();
        return len;
    }
    void solve(vector<string> &rst, vector<vector<char> > chess, int row, int n)
    {
        if(row == n) 
        {
            rst.emplace_back(convert(chess));
            return;
        }
        for(int col = 0; col < n; ++col)
        {
            if(valid(chess, row, col))
            {
                chess[row][col] = 'Q';
                solve(rst, chess, row+1, n);
                chess[row][col] = 'Z';
            }
        }
    }
    
    string convert(vector<vector<char> > chess) //就是放便可视化展示结果
    {
        string rst;
        int len = chess.size();
        for(int i = 0; i < len; ++i)
        {
            string *temp = new string(chess[i].begin(),chess[i].end());
            rst = rst + "\n"+ *temp;
        }
        return rst;
    }
    
    bool valid(vector<vector<char> > chess, int r, int c)
    {
        
        int col = chess[0].size();
        for(int i = r - 1 , j = c + 1; i >= 0 && j < col; i--, j++)//右上角
        {
            if(chess[i][j] ==  'Q') return false;
        }
        
        for(int i = r -1 , j = c -1; i >= 0 && j >= 0; i--, j--) //左上角
        {
            if(chess[i][j] == 'Q') return false;
        }
        for( int i = r-1; i >= 0; i--) //同一列
        {
            if(chess[i][c] == 'Q') return false;
        }
        return true;
    }
};
全部评论

相关推荐

感觉他们一点都不了解现在这个社会就业有多难,已经在牛客刷到好多篇&nbsp;延毕的帖子了,延毕就会导致已经找好的工作就没了,还得重新再找,学校和老师们是怎么想的呢????看到学生丢失工作会开心吗&nbsp;就业数据都在造假,真实的就业困难不去解决&nbsp;一个个真是好样的
从明天开始狠狠卷JV...:学生看到的是导师不放实习导致offer黄了。 导师看到的是招进来的学生吃自己补助和自己的招生名额,却没给自己升迁带来任何帮助,还要跑路。 根本利益的不一致,最主要留校的导师大概率是职场上招聘失败的,被迫留校的,什么牛鬼蛇神都会有
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
06-27 14:11
很喜欢小米的新车,校招薪资每月22k,攒多久能买?
测试糕手手:别看工资,先看现金流存款。有50W存款以上再考虑,车是消耗品,选适合自己的重要。你有钱就当我没说过
点赞 评论 收藏
分享
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-02 18:35
简历上把1个月实习写成了3个月,会进行背调吗?
码农索隆:一个月有一个月的实习经历,三个月有三个月的实习经历
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务