首页 > 其他 > 详细

leetcode@ [51/52] N-Queens

时间:2015-10-22 12:33:54      阅读:294      评论:0      收藏:0      [点我收藏+]

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 };

 

leetcode@ [51/52] N-Queens

原文:http://www.cnblogs.com/fu11211129/p/4900310.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!