import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param n int整型 the n
* @return int整型
*/
Integer num = 0;
int[][] isVisited;
public int Nqueen (int n) {
// write code here
isVisited = new int[n][n];
solution3(n, 0, -2);
return num;
}
public void solution3(int n, int column, int preLine) {
if (column == n) {
num++;
return;
}
for (int i = 0; i < n; i++) {
if (isVisited[column][i] > 0 || i == preLine - 1 || i == preLine + 1 ||
i == preLine) {
continue;
} else {
isVisited[column][i]++;
for (int k = column + 1; k < n; k++) {
isVisited[k][i]++;
}
int zl = i - 1, yl = i + 1, hang = column + 1;
while (zl >= 0 && hang < n) {
isVisited[hang++][zl--]++;
}
hang = column + 1;
while (yl < n && hang < n) {
isVisited[hang++][yl++]++;
}
solution3(n, column + 1, i);
isVisited[column][i]--;
zl = i - 1;
yl = i + 1;
hang = column + 1;
while (zl >= 0 && hang < n) {
isVisited[hang++][zl--]--;
}
hang = column + 1;
while (yl < n && hang < n) {
isVisited[hang++][yl++]--;
}
for (int k = column + 1; k < n; k++) {
isVisited[k][i]--;
}
}
}
}
}