1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
func totalNQueens(n int) int {
var count int
columns := make([]bool, n) // columns |
d1 := make([]bool, 2*n) // diagonals \
d2 := make([]bool, 2*n) // diagonals /
backtracking(0, n, columns, d1, d2, &count)
return count
}
func backtracking(currentRow, n int, columns, d1, d2 []bool, count *int) {
if currentRow == n {
*count++
return
}
for i := 0; i < n; i++ {
//行数-列数,+n 是为了剔除负数
idx1 := n - i + currentRow
//行数+列数
idx2 := currentRow + i
if d1[idx1] || d2[idx2] || columns[i] {
continue
}
//标记
d1[idx1], d2[idx2], columns[i] = true, true, true
backtracking(currentRow+1, n, columns, d1, d2, count)
//回溯
d1[idx1], d2[idx2], columns[i] = false, false, false
}
}
|