代码改变世界

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