數獨是一種非常受歡迎的數字邏輯游戲。今天我們來用 Python 解決數獨問題。
首先,我們需要定義數獨的規則。數獨是一個 9x9 的格子,每個格子可以填入 1~9 的數字。我們需要在保持行、列和 3x3 小方塊內的數字都不重復的情況下,填滿整個數獨。
接下來我們來看如何用 Python 解決數獨問題。我們可以采用遞歸算法來實現。在遞歸過程中,我們首先需要找到數獨中最左上角沒有填數字的格子。然后從 1 到 9 的數字中挑選一個數字嘗試填入這個格子中。填入數字后需要檢查當前狀態是否合法,如果合法則繼續遞歸下一步,否則回溯至上一步。
def solveSudoku(board):
"""
:type board: List[List[str]]
:rtype: void Do not return anything, modify board in-place instead.
"""
def isValid(row, col, num):
for i in range(9):
if board[i][col] == num: return False
if board[row][i] == num: return False
if board[3 * (row // 3) + i // 3][3 * (col // 3) + i % 3] == num: return False
return True
def solve():
for i in range(9):
for j in range(9):
if board[i][j] == '.':
for num in '123456789':
if isValid(i, j, num):
board[i][j] = num
if solve(): return True
board[i][j] = '.'
return False
return True
solve()
上面是解決數獨問題的完整代碼。我們定義了一個solveSudoku
函數來實現填數獨的功能。在函數中,我們首先定義一個isValid
函數用來檢查填入的數字是否合法。接下來我們定義了一個遞歸函數solve
,在遞歸過程中按照上述步驟嘗試填數,并判斷填數是否合法。如果成功完成數獨填充,則返回True
,如果無法填充則返回False
。
最后,我們需要將數獨填滿并輸出。你可以在代碼中寫入以下內容:
for row in board:
print(row)
以上代碼可將結果打印出來,便于查看。
好了,以上就是今天為大家帶來的 Python 解決數獨問題的方法,希望對大家有所幫助!