LeetCode37 解數獨(回溯 set)

2021-10-09 12:00:13 字數 1507 閱讀 5824

編寫乙個程式,通過已填充的空格來解決數獨問題。

乙個數獨的解法需遵循如下規則:

數字 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 和...