數(shù)獨(dú)是一種非常受歡迎的數(shù)字邏輯游戲。今天我們來用 Python 解決數(shù)獨(dú)問題。
首先,我們需要定義數(shù)獨(dú)的規(guī)則。數(shù)獨(dú)是一個 9x9 的格子,每個格子可以填入 1~9 的數(shù)字。我們需要在保持行、列和 3x3 小方塊內(nèi)的數(shù)字都不重復(fù)的情況下,填滿整個數(shù)獨(dú)。
接下來我們來看如何用 Python 解決數(shù)獨(dú)問題。我們可以采用遞歸算法來實(shí)現(xiàn)。在遞歸過程中,我們首先需要找到數(shù)獨(dú)中最左上角沒有填數(shù)字的格子。然后從 1 到 9 的數(shù)字中挑選一個數(shù)字嘗試填入這個格子中。填入數(shù)字后需要檢查當(dāng)前狀態(tài)是否合法,如果合法則繼續(xù)遞歸下一步,否則回溯至上一步。
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()
上面是解決數(shù)獨(dú)問題的完整代碼。我們定義了一個solveSudoku
函數(shù)來實(shí)現(xiàn)填數(shù)獨(dú)的功能。在函數(shù)中,我們首先定義一個isValid
函數(shù)用來檢查填入的數(shù)字是否合法。接下來我們定義了一個遞歸函數(shù)solve
,在遞歸過程中按照上述步驟嘗試填數(shù),并判斷填數(shù)是否合法。如果成功完成數(shù)獨(dú)填充,則返回True
,如果無法填充則返回False
。
最后,我們需要將數(shù)獨(dú)填滿并輸出。你可以在代碼中寫入以下內(nèi)容:
for row in board:
print(row)
以上代碼可將結(jié)果打印出來,便于查看。
好了,以上就是今天為大家?guī)淼?Python 解決數(shù)獨(dú)問題的方法,希望對大家有所幫助!