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