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