技術問答
技術文章
iT 徵才
Tag
聊天室
2025 鐵人賽
登入/註冊
問答
文章
Tag
邦友
鐵人賽
搜尋
2024 iThome 鐵人賽
DAY
28
0
佛心分享-IT 人自學之術
Python學習馬拉松:30天挑戰
系列 第
28
篇
Day28. 實作練習:數獨解決器Sudoku Solver
16th鐵人賽
sheep
2024-10-12 09:51:50
253 瀏覽
分享至
教學來源:https://www.youtube.com/watch?v=8ext9G7xspg
這段 Python 程式碼實現了一個 Sudoku 解決器。Sudoku 是一種數學邏輯遊戲,玩家需要根據已知的數字,在一個 9x9 的格子上填入數字 1-9,使得每一行、每一列和每一個 3x3 的小九宮格中,數字 1-9 都只出現一次。
程式碼與執行結果:
程式結構
◆ find_next_empty 函數:
◎ 這個函數用來尋找下一個空的格子。
◎ 遍歷整個棋盤,找到第一個值為 -1 的格子(用 -1 表示空格子),並返回其行和列索引。
◎ 如果找不到空的格子,則返回 None。
◆ is_valid 函數:
◎ 這個函數用來判斷在指定位置填入一個數字是否合法。
◎ 檢查該數字是否在同一行、同一列或同一個 3x3 小九宮格中出現過。
◎ 如果數字合法,返回 True,否則返回 False。
◆ solve_sudoku 函數:
◎ 這是整個解題的核心函數。
◎ 採用回溯法(backtracking)來解決 Sudoku。
◎ 首先找到下一個空的格子。
◎ 對於這個空格子,嘗試填入 1 到 9 之間的數字。
◎ 對於每個嘗試的數字,檢查是否合法。
○ 如果合法,則遞歸調用 solve_sudoku 函數,試圖解出剩下的部分。
○ 如果遞歸調用返回 True,表示找到了一個解。
○ 如果遞歸調用返回 False,則回溯,嘗試填入其他數字。
○ 如果所有數字都試過了,仍然找不到解,則表示原來的 Sudoku 無解。
程式流程
初始化棋盤: 將一個部分填好的 Sudoku 棋盤作為輸入。
尋找空格子: 使用 find_next_empty 函數找到下一個空的格子。
嘗試填數字: 對於找到的空格子,依次嘗試填入 1 到 9。
檢查合法性: 使用 is_valid 函數檢查填入的數字是否合法。
遞歸求解: 如果合法,則遞歸調用 solve_sudoku 函數,試圖解出剩下的部分。
回溯: 如果遞歸調用返回 False,則回溯,嘗試填入其他數字。
找到解或無解: 如果找到了一個解,則返回 True;如果所有可能都試過了,仍然找不到解,則返回 False。
留言
追蹤
檢舉
上一篇
Day27. 實作練習:踩地雷遊戲 Minesweeper
下一篇
Day29. 實作練習:圈圈叉叉Tic-Tac-Toe --AI
系列文
Python學習馬拉松:30天挑戰
共
30
篇
目錄
RSS系列文
訂閱系列文
2
人訂閱
26
Day26. 實作練習:Binary Search
27
Day27. 實作練習:踩地雷遊戲 Minesweeper
28
Day28. 實作練習:數獨解決器Sudoku Solver
29
Day29. 實作練習:圈圈叉叉Tic-Tac-Toe --AI
30
Day30. 實作練習:馬可夫鏈文本生成器 Markov Chain Text Composer
完整目錄
熱門推薦
{{ item.subject }}
{{ item.channelVendor }}
|
{{ item.webinarstarted }}
|
{{ formatDate(item.duration) }}
直播中
立即報名
尚未有邦友留言
立即登入留言
iThome鐵人賽
參賽組數
430
組
團體組數
14
組
累計文章數
3428
篇
最後報名日
9/15
看影片追技術
看更多
{{ item.subject }}
{{ item.channelVendor }}
|
{{ formatDate(item.duration) }}
直播中
熱門tag
看更多
15th鐵人賽
16th鐵人賽
13th鐵人賽
14th鐵人賽
12th鐵人賽
11th鐵人賽
鐵人賽
2019鐵人賽
javascript
2018鐵人賽
python
2017鐵人賽
17th鐵人賽
windows
php
c#
windows server
linux
css
react
熱門問題
不知道網路紅隊的要去那加公司
Jaspersoft 的資料庫連結 出現錯誤:驅動程式無法使用安全通訊端層 (SSL) 加密建立與 SQL Server 的安全連接。
aws ec2 檢查故障問題
IIS 管理員 連線功能不見
尋求git之外的 高效能本機檔案備份 & 版本管理推薦
請問有人遇過在lightsail上部屬fastapi失敗的案例?
port-forwading到遠程網段
HackerOne的賞金等好久都領不到
熱門回答
不知道網路紅隊的要去那加公司
尋求git之外的 高效能本機檔案備份 & 版本管理推薦
請問有人遇過在lightsail上部屬fastapi失敗的案例?
aws ec2 檢查故障問題
port-forwading到遠程網段
熱門文章
什麼是 Signal ?
序: AI 加速編碼後,你該學什麼?
Signal 的核心概念
第12天,即時通訊軟體選擇 / 金峰滷肉飯 台北名店(台北中正)| 30天滷肉飯
第13天,雲端硬碟軟體選擇 / 吉仔冬瓜肉飯 在地排隊美食(新北土城)| 30天滷肉飯
IT邦幫忙
×
標記使用者
輸入對方的帳號或暱稱
Loading
找不到結果。
標記
{{ result.label }}
{{ result.account }}