leetcode - N-Queens
2013-11-22 23:01 张汉生 阅读(197) 评论(0) 编辑 收藏 举报
1 class Solution { 2 public: 3 void generateResults(vector<vector<string> > &rlts, int n, int index, int * cur, bool * flag1, bool * flag2, bool* flag3){ 4 for (int i=0; i<n; i++){ 5 int j = index+i; 6 int k = index-i+n-1; 7 if (flag1[i] || flag2[j] || flag3[k]){ 8 continue; 9 } 10 flag1[i]=true; 11 flag2[j]=true; 12 flag3[k]=true; 13 cur[index] = i; 14 if (index==n-1){ 15 vector<string> rlt; 16 for (int p=0; p<n; p++){ 17 string s=""; 18 for (int q=0; q<n; q++){ 19 if (cur[p]==q) 20 s+='Q'; 21 else s+='.'; 22 } 23 rlt.push_back(s); 24 } 25 rlts.push_back(rlt); 26 } 27 else generateResults(rlts,n,index+1,cur,flag1,flag2,flag3); 28 flag1[i]=false; 29 flag2[j]=false; 30 flag3[k]=false; 31 } 32 } 33 34 vector<vector<string> > solveNQueens(int n) { 35 // IMPORTANT: Please reset any member data you declared, as 36 // the same Solution instance will be reused for each test case. 37 vector<vector<string> > rlts; 38 if (n<=0) 39 return rlts; 40 int * cur = new int[n]; 41 bool * flag1 = new bool[n]; 42 bool * flag2 = new bool[2*n-1]; 43 bool * flag3 = new bool[2*n-1]; 44 for (int i=0; i<n; i++){ 45 flag1[i]=false; 46 cur[i] = 0; 47 } 48 for (int i=0; i<2*n-1; i++){ 49 flag2[i]=false; 50 flag3[i]=false; 51 } 52 generateResults(rlts,n,0,cur,flag1,flag2,flag3); 53 delete []cur; 54 delete []flag1; 55 delete []flag2; 56 delete []flag3; 57 return rlts; 58 } 59 };