前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LeetCode-51-N-Queens

LeetCode-51-N-Queens

作者头像
小二三不乌
发布2018-08-02 10:27:23
2480
发布2018-08-02 10:27:23
举报

LeetCode-51-N-Queens

经典的N皇后问题,重点是全排列的问题,但是这里由于N皇后的不重复行、列、斜的要求,在排列的过程中,比如从行开始排列,只能保证同行不重复,所以需要引入isValid函数。通过判断列,左斜、右斜是否重复。

需要注意的是:关于全排列递归的写法,要更加熟练掌握才行,并且能完全理解,能够在不同的情况中灵活运用。其基本思想还是:固定前面的某个数字,不短的对后面进行交换。

代码语言:javascript
复制
class Solution {
public:
    bool isValid(vector<string>& queen, int row,int col,int n){
        for(int i=0;i<row;++i){
            if(queen[i][col]=='Q')
                return false;
        }
        for(int i=row-1,j=col-1;i>=0&&j>=0;--i,--j){
            if(queen[i][j]=='Q')
                return false;
        }
        for(int i=row-1,j=col+1;i>=0&&j<n;--i,++j){
            if(queen[i][j]=='Q')
                return false;
        }
        return true;
    }
    void recurse(vector<string>& queen,vector<vector<string>>& res,int row,int n){
        if(row==n){
            res.push_back(queen);
            return;
        }
        for(int col=0;col!=n;++col){
            if(isValid(queen,row,col,n)){
                queen[row][col]='Q';
                recurse(queen,res,row+1,n);
                queen[row][col]='.';
            }
        }
    }
    vector<vector<string>> solveNQueens(int n) {
        vector<vector<string>> res;
        vector<string> queen(n,string(n,'.'));
        recurse(queen,res,0,n);
        return res;
    }
};
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-01-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • LeetCode-51-N-Queens
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档