算數獨是一種受歡迎的數學謎題游戲,許多人都喜歡挑戰自己的智力。在計算機編程的世界里,我們也可以使用Python編寫一個算數獨程序來解決這些問題。
# 導入需要的庫 import numpy as np # 定義全局變量 N = 9 # 數獨的維數 empty = 0 # 未填寫的格子 # 定義數獨矩陣 board = [[0, 0, 0, 9, 3, 0, 0, 0, 0], [0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 8, 0, 0, 9, 0, 0], [8, 0, 0, 0, 0, 4, 7, 0, 0], [0, 0, 7, 0, 0, 0, 0, 0, 5], [5, 0, 0, 0, 0, 3, 0, 8, 0], [7, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 5, 2, 6, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0]] # 定義函數,查找可用數字 def find_empty(board): for i in range(N): for j in range(N): if board[i][j] == empty: return (i, j) return None # 定義函數,檢查數字是否合法 def is_valid(board, num, pos): # 檢查行是否合法 for i in range(N): if board[pos[0]][i] == num and pos[1] != i: return False # 檢查列是否合法 for i in range(N): if board[i][pos[1]] == num and pos[0] != i: return False # 檢查小方格是否合法 box_x = pos[1] // 3 box_y = pos[0] // 3 for i in range(box_y * 3, box_y * 3 + 3): for j in range(box_x * 3, box_x * 3 + 3): if board[i][j] == num and (i, j) != pos: return False return True # 定義函數,遞歸搜索解決數獨 def solve(board): # 查找未填寫的格子 find = find_empty(board) # 如果沒有未填寫的格子,程序結束 if not find: return True # 如果有未填寫的格子,繼續下一步 else: row, col = find # 嘗試填寫數字 for i in range(1, N + 1): if is_valid(board, i, (row, col)): board[row][col] = i # 繼續搜索下一步 if solve(board): return True # 如果搜索失敗,將當前格子還原為空格 board[row][col] = empty return False # 測試程序 if __name__ == '__main__': print(np.matrix(board)) solve(board) print(np.matrix(board))
以上就是一個基本的Python算數獨程序,它使用遞歸來搜索并解決數獨,能夠幫助我們更輕松高效地解決這類數學問題。