@@ -19,17 +19,18 @@ def backtracking(pieces, positions, i, lookup):
19
19
result = 0
20
20
r , c = positions [i ]
21
21
r , c = r - 1 , c - 1
22
- if not lookup [r ][c ]:
23
- lookup [r ][c ] = all_mask # stopped at (r, c)
22
+ mask = all_mask
23
+ if not (lookup [r ][c ]& mask ):
24
+ lookup [r ][c ] += mask # stopped at (r, c)
24
25
result += backtracking (pieces , positions , i + 1 , lookup )
25
- lookup [r ][c ] = 0
26
+ lookup [r ][c ] -= mask
26
27
for dr , dc in directions [pieces [i ]]:
27
28
bit , nr , nc = 1 , r + dr , c + dc
28
29
mask = all_mask # (mask&bit == 1): (log2(bit)+1)th second is occupied
29
30
while 0 <= nr < 8 and 0 <= nc < 8 and not (lookup [nr ][nc ]& bit ):
30
31
lookup [nr ][nc ] += bit
31
32
mask -= bit
32
- if not lookup [nr ][nc ]& mask : # stopped at (nr, nc)
33
+ if not ( lookup [nr ][nc ]& mask ) : # stopped at (nr, nc)
33
34
lookup [nr ][nc ] += mask
34
35
result += backtracking (pieces , positions , i + 1 , lookup )
35
36
lookup [nr ][nc ] -= mask
@@ -38,5 +39,5 @@ def backtracking(pieces, positions, i, lookup):
38
39
bit , nr , nc = bit >> 1 , nr - dr , nc - dc
39
40
lookup [nr ][nc ] -= bit
40
41
return result
41
-
42
+
42
43
return backtracking (pieces , positions , 0 , [[0 ]* 8 for _ in range (8 )])
0 commit comments