zoukankan      html  css  js  c++  java
  • leetcode@ [51/52] N-Queens

    https://leetcode.com/problems/n-queens/

     1 class Solution {
     2 public:
     3     void dfs(vector<vector<string>> &ret, vector<vector<char>> map,int i, int j){
     4         if(i==map.size()-1){
     5             vector<string> ans; ans.clear();
     6             for(int ki=0;ki<map.size();++ki){
     7                 string s="";
     8                 for(int kj=0;kj<map[0].size();++kj){
     9                     s+=map[ki][kj];
    10                 }
    11                 ans.push_back(s);
    12             }
    13             ret.push_back(ans);
    14             return;
    15         }
    16         
    17         vector<vector<char>> tmp(map.size());
    18         for(int i=0;i<tmp.size();++i) tmp.resize(map.size());
    19         tmp = map;       
    20         for(int k=0;k<map[0].size();k++){
    21             
    22             if(map[i+1][k]=='.') continue;
    23             
    24             for(int col=0;col<map[0].size();++col){
    25                 if(map[i+1][col]==' ') map[i+1][col]='.'; 
    26             }
    27             for(int row=i+1;row<map.size();++row){
    28                 if(map[row][k]==' ') map[row][k]='.';
    29             }
    30             for(int row=i+2,col=k+1;row<map.size() && col<map[0].size();++row,++col){
    31                 if(map[row][col]==' ') map[row][col]='.';
    32             }
    33             for(int row=i+2,col=k-1;row<map.size() && col>=0;++row,--col){
    34                 if(map[row][col]==' ') map[row][col]='.';
    35             }
    36             map[i+1][k]='Q';
    37 
    38             dfs(ret,map,i+1,k);
    39             
    40             map=tmp;
    41         }
    42         
    43     }
    44     vector<vector<string>> solveNQueens(int n) {
    45         vector<vector<string>> ret;
    46         if(n==0) return ret;
    47         
    48         vector<vector<char>> map(n);
    49         for(int i=0;i<map.size();++i) map[i].resize(n);
    50         for(int i=0;i<map.size();++i){
    51             for(int j=0;j<map[i].size();++j) map[i][j]=' ';
    52         }
    53         
    54         vector<vector<char>> tmp(map.size());
    55         for(int i=0;i<tmp.size();++i) tmp.resize(map.size());
    56         tmp = map;
    57         for(int k=0;k<map[0].size();k++){
    58             for(int col=0;col<map[0].size();++col) map[0][col]='.';
    59             for(int row=0;row<map.size();++row) map[row][k]='.';
    60             for(int row=1,col=k+1;row<map.size() && col<map[0].size();++row,++col) map[row][col]='.';
    61             for(int row=1,col=k-1;row<map.size() && col>=0;++row,--col) map[row][col]='.';
    62             map[0][k]='Q';
    63             
    64             dfs(ret,map,0,k);
    65             
    66             map=tmp;
    67         } 
    68 
    69         return ret;
    70     }
    71 };
  • 相关阅读:
    codeforces 455C 并查集
    poj 3501 Escape from Enemy Territory 预处理+二分+bfs
    POJ 2110 Mountain Walking 二分+bfs
    poj1637 Sightseeing tour 混合图欧拉回路判定
    ubuntu禁用super(win)键
    win10 ubuntu双系统安装后无法引导进入ubuntu
    python2限制函数传入的关键字参数
    python限制函数执行时间
    python classmethod 和 staticmethod的区别
    centos sendmail 启动慢
  • 原文地址:https://www.cnblogs.com/fu11211129/p/4900310.html
Copyright © 2011-2022 走看看