leetcode - N-Queens II
2013-11-22 23:09 张汉生 阅读(168) 评论(0) 编辑 收藏 举报
1 class Solution { 2 public: 3 void generateResults(int & rlt, int n, int index, 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 if (index==n-1){ 14 rlt++; 15 } 16 else generateResults(rlt,n,index+1,flag1,flag2,flag3); 17 flag1[i]=false; 18 flag2[j]=false; 19 flag3[k]=false; 20 } 21 } 22 23 int totalNQueens(int n) { 24 // IMPORTANT: Please reset any member data you declared, as 25 // the same Solution instance will be reused for each test case. 26 if (n<=0) 27 return 0; 28 int * cur = new int[n]; 29 bool * flag1 = new bool[n]; 30 bool * flag2 = new bool[2*n-1]; 31 bool * flag3 = new bool[2*n-1]; 32 for (int i=0; i<n; i++){ 33 flag1[i]=false; 34 } 35 for (int i=0; i<2*n-1; i++){ 36 flag2[i]=false; 37 flag3[i]=false; 38 } 39 int rlt = 0; 40 generateResults(rlt,n,0,flag1,flag2,flag3); 41 delete []flag1; 42 delete []flag2; 43 delete []flag3; 44 return rlt; 45 } 46 };