Skip to content
This repository was archived by the owner on Sep 20, 2023. It is now read-only.

Commit a48bfe0

Browse files
committed
fix #57
1 parent 9b8fba7 commit a48bfe0

File tree

1 file changed

+20
-1
lines changed

1 file changed

+20
-1
lines changed

Algorithms/0051.n-queens/n-queens.go

+20-1
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,27 @@ func dfs(r int, cols, d1, d2 []bool, board []string, res *[][]string) {
3232
n := len(board)
3333

3434
for c := 0; c < len(board); c++ {
35+
// 把棋盘想象成
36+
// 以左上角为坐标原点 [0,0]
37+
// C 轴正方向向右
38+
// R 轴正方向向下
39+
// 的坐标系。
40+
// 这样的话,每个格子就都有了自己的坐标值 [c,r]
41+
//
42+
// 对于 '\' 方向的斜线而言
43+
// 同一个斜线上的格子,利用其坐标 [c,r] 计算 r-c 的结果相同,
44+
// 不同斜线上 r-c 的结果不同。
45+
// 所以可以用 r-c 代表不同的 '\' 方向的斜线的编号。
46+
// 但是 r-c 有可能是负值,无法作为切片的索引值
47+
// 所以 +n,可知 r-c+n >= 0
48+
// 所以,使用 r-c+n 作为 '\' 方向斜线切片的索引值。
49+
// 对于 '/' 方向的斜线而言
50+
// 同一个斜线上的格子,利用其坐标 [c,r] 计算 r+c 的结果相同,
51+
// 不同斜线上 r+c 的结果不同。
52+
// 所以可以用 r+c 代表不同的 '/' 方向的斜线的编号。
53+
// 所以,使用 r+c 作为 '/' 方向斜线切片的索引值。
3554
id1 := r - c + n
36-
id2 := 2*n - r - c - 1
55+
id2 := r + c
3756
if !cols[c] && !d1[id1] && !d2[id2] {
3857
b := make([]byte, n)
3958
for i := range b {

0 commit comments

Comments
 (0)