技術問答
技術文章
iT 徵才
聊天室
2025 鐵人賽
登入/註冊
問答
文章
Tag
邦友
鐵人賽
搜尋
2024 iThome 鐵人賽
DAY
28
0
佛心分享-IT 人自學之術
Python學習馬拉松:30天挑戰
系列 第
28
篇
Day28. 實作練習:數獨解決器Sudoku Solver
16th鐵人賽
sheep
2024-10-12 09:51:50
308 瀏覽
分享至
教學來源: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鐵人賽
參賽組數
902
組
團體組數
37
組
累計文章數
19847
篇
完賽人數
528
人
看影片追技術
看更多
{{ item.subject }}
{{ item.channelVendor }}
|
{{ formatDate(item.duration) }}
直播中
熱門tag
15th鐵人賽
16th鐵人賽
13th鐵人賽
14th鐵人賽
17th鐵人賽
12th鐵人賽
11th鐵人賽
鐵人賽
2019鐵人賽
javascript
2018鐵人賽
python
2017鐵人賽
windows
php
c#
linux
windows server
css
react
熱門問題
[Javascript] 非同步執行,如何延緩後面程式的處理 ??
FortiGate SSLVPN替代方案?
AARQ 通訊協議是?
SSLVPN 轉 IPSEC VPN 的問題
Dell or Asus 伺服器,哪牌比較好?
Dell or Asus Storage 或NAS,哪牌比較好?
將硬碟上的 EFI 分割區複製到固態硬碟後,ARM 架構的 Ubuntu Server 無法啟動
iT邦幫忙如何搜尋 關鍵字?
sdray vigor2927 sslvpn ip設定問題
Qnap帳號於同一個IP反覆登入失敗.
熱門回答
FortiGate SSLVPN替代方案?
[Javascript] 非同步執行,如何延緩後面程式的處理 ??
Dell or Asus 伺服器,哪牌比較好?
將硬碟上的 EFI 分割區複製到固態硬碟後,ARM 架構的 Ubuntu Server 無法啟動
iT邦幫忙如何搜尋 關鍵字?
熱門文章
c++的.h和cpp,放在相同目錄下好,還是頂層就用include,src分開好? [搬運/問答]
人工智慧模型 LLM (單一模型) 與 人工智慧代理 AI Agent(人工智慧代理)是什麼?兩者之間的關鍵差異?
別再只是做報表了,真正的人資資料分析是這樣做的
你的產品用了多少開源軟體?如何掌握潛在漏洞與風險?
AI 音樂創作指令(Prompt)深度指南:解鎖主流AI 音樂生成工具的全部潛力
IT邦幫忙
×
標記使用者
輸入對方的帳號或暱稱
Loading
找不到結果。
標記
{{ result.label }}
{{ result.account }}