码迷,mamicode.com
首页 > 其他好文 > 详细

Leetcode 51. N皇后

时间:2018-06-24 13:08:23      阅读:204      评论:0      收藏:0      [点我收藏+]

标签:pre   oid   string   turn   tco   pat   int   tor   多少   

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皇后

标签:pre   oid   string   turn   tco   pat   int   tor   多少   

原文地址:https://www.cnblogs.com/randyniu/p/9219984.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!