編寫乙個程式,通過已填充的空格來解決數獨問題。
乙個數獨的解法需遵循如下規則:
數字 1-9 在每一行只能出現一次。
數字 1-9 在每一列只能出現一次。
數字 1-9 在每乙個以粗實線分隔的 3x3 宮內只能出現一次。
空白格用 '.' 表示。
"""row = [set(range(1, 10)) for _ in range(9)] # 行剩餘可用數字
col = [set(range(1, 10)) for _ in range(9)] # 列剩餘可用數字
block = [set(range(1, 10)) for _ in range(9)] # 塊剩餘可用數字
empty = # 收集需填數字置
for i in range(9):
for j in range(9):
if board[i][j] != '.': # 更新可用數字
val = int(board[i][j])
row[i].remove(val)
col[j].remove(val)
block[(i // 3)*3 + j // 3].remove(val)
else:
def backtrack(iter=0):
if iter == len(empty): # 處理完empty代表找到了答案
return true
i, j = empty[iter]
b = (i // 3)*3 + j // 3
for val in row[i] & col[j] & block[b]:
row[i].remove(val)
col[j].remove(val)
block[b].remove(val)
board[i][j] = str(val)
if backtrack(iter+1):
return true
row[i].add(val) # 回溯
col[j].add(val)
block[b].add(val)
return false
backtrack()
solution/pythonsethui-su-chao-guo-95-by-mai-mai-mai-mai-zi/
LeetCode 37 解數獨 困難
編寫乙個程式,通過填充空格來解決數獨問題。乙個數獨的解法需遵循如下規則 以下內容來自37.解數獨 回溯搜尋演算法 詳解 回溯三部曲 遞迴函式以及引數 遞迴函式的返回值需要是bool型別,為什麼呢?因為解數獨找到乙個符合的條件 就在樹的葉子節點上 立刻就返回,相當於找從根節點到葉子節點一條唯一路徑,所...
leetcode 37 解數獨 深搜
編寫乙個程式,通過已填充的空格來解決數獨問題。乙個數獨的解法需遵循如下規則 數字 1 9 在每一行只能出現一次。數字 1 9 在每一列只能出現一次。數字 1 9 在每乙個以粗實線分隔的 3x3 宮內只能出現一次。空白格用 表示。public class 37 for int i 0 i 9 i fo...
Leetcode NO 37 解數獨 回溯
編寫乙個程式,通過已填充的空格來解決數獨問題。乙個數獨的解法需遵循如下規則 數字 1 9 在每一行只能出現一次。數字 1 9 在每一列只能出現一次。數字 1 9 在每乙個以粗實線分隔的 3x3 宮內只能出現一次。空白格用 表示。乙個數獨。答案被標成紅色。note 給定的數獨序列只包含數字 1 9 和...