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 };
原文地址:https://www.cnblogs.com/fu11211129/p/4900310.html