数独
Last updated
Last updated
问题简述
思路
使用三个矩阵记录每行、每列、每块出现过的数字;开始时,需要对已经出现过的数字初始化;
难点1:
对 board[i][j]
很容易确定他所在的行和列,但是确定所在块需要对坐标做一个转换;
具体来说,假设块的标号从左往右,从上往下依次为 0~8
,则对 (i,j)
,其所在块的 id 为 k = 3*(i/3) + j/3
;
简单验证几个位置,(0,0)
在第 0 块,(8,8)
在第 8 块;(4,5)
在第 4 块;
难点2:
确定下一个遍历位置,最直观的顺序是从左往右,从上往下;
假设当前位置为 (i, j)
表示第 i
行,第 j
列;则下一个位置 (nxt_i, nxt_j)
为:
nxt_i = i if j != 8 else i + 1
;
nxt_j = j + 1 if j != 8 else 0
;
详见代码;