package main
/**
*
* @param n int整型 the n
* @return int整型
*/
func Nqueen( n int ) int {
tmp:=make([][]int,n)
for i:=range tmp{
tmp[i]=make([]int,n)
}
return dfs(tmp,0,n)
}
func dfs(tmp [][]int,level int,n int)int{
if level>=n{return 1}
sum:=0
for j:=0;j<n;j++{
if check(tmp, level, j, n){
tmp[level][j]=1
sum+=dfs(tmp,level+1,n)
tmp[level][j]=0
}
}
return sum
}
func check(tmp [][]int,y,x,n int)bool{
for i:=0;i<y;i++{
if tmp[i][x]==1{
return false
}
}
i:=y-1
j:=x-1
for i>=0&&j>=0{
if tmp[i][j]==1{
return false
}
i=i-1
j=j-1
}
i=y+1
j=x+1
for i<n&&j<n{
if tmp[i][j]==1{
return false
}
i=i+1
j=j+1
}
i=y-1
j=x+1
for i>=0&&j<n{
if tmp[i][j]==1{
return false
}
i=i-1
j=j+1
}
i=y+1
j=x-1
for i<n&&j>=0{
if tmp[i][j]==1{
return false
}
i=i+1
j=j-1
}
return true
}