{"id":23773029,"url":"https://github.com/weiawesome/sudoku_resolver","last_synced_at":"2026-04-02T09:30:18.078Z","repository":{"id":269231283,"uuid":"906790564","full_name":"weiawesome/sudoku_resolver","owner":"weiawesome","description":"The easy way to solve the problem of sudoku.","archived":false,"fork":false,"pushed_at":"2024-12-21T23:57:40.000Z","size":4687,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-07T08:01:51.350Z","etag":null,"topics":["cpp","sudoku","sudoku-solver"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/weiawesome.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-12-21T23:01:48.000Z","updated_at":"2024-12-21T23:59:00.000Z","dependencies_parsed_at":null,"dependency_job_id":"d9d53a8a-67b6-4d04-9201-1ad2cfc9ea4b","html_url":"https://github.com/weiawesome/sudoku_resolver","commit_stats":null,"previous_names":["weiawesome/sudoku_resolver"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weiawesome%2Fsudoku_resolver","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weiawesome%2Fsudoku_resolver/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weiawesome%2Fsudoku_resolver/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weiawesome%2Fsudoku_resolver/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/weiawesome","download_url":"https://codeload.github.com/weiawesome/sudoku_resolver/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239690065,"owners_count":19681034,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cpp","sudoku","sudoku-solver"],"created_at":"2025-01-01T05:22:03.785Z","updated_at":"2026-04-02T09:30:15.552Z","avatar_url":"https://github.com/weiawesome.png","language":"C++","funding_links":[],"categories":["Why This Repo Exists"],"sub_categories":[],"readme":"# Sudoku Solver\n## 專案開發動機\n其實這就是一個簡易的程序 甚至完全說不是是專案\n\n是說我為啥沒事做這個呢，那先得說說前陣子去哪了\n\n為啥 GitHub都沒更新 也都沒有 Git 紀錄呢\n\n沒錯 因為我去當兵惹(心酸) 其實真的偏焦慮阿 \n* 會不會出來就被社會淘汰 ( AI進展真的太快了 )\n* 軍營裡面智障會不會很多\n* 我會不會沒朋友、會不會被欺負\n* 訓練操演會不會很累 我無法負擔\n* 跑步、游泳那些怎麼辦\n\n不過最後雖然過程有許多蠻靠北的部分，但其實沒有那麼累啦~~~\n\n對了我抽中的是海軍歐 ( 四個月兵 然後沒下部隊 )\n\n\u003e ### 想像中的海軍模樣\n![想像海軍](./assets/navy-imagine.png)\n\n\u003e ### 實際的海軍模樣\n![alt text](./assets/navy-real.png)\n\n其實真的蠻廢的 基本第二階段後 \n\n就是教官在上面講課 我們在下面睡覺、讀自己的書與玩數獨\n\n```text\n備註 :\n    在裡面真的很無聊，不過多虧這麼多無聊時間\n    讀了許多論文與書籍，未來有空可以來整理並分享\n\n    算是把原本很缺乏的理論知識好好的補課一番\n    蠻多關於分散式、資料庫、資料結構、系統設計等等\n    認為蠻多的很有意思的，順便練習英文\n```\n\n## 解數獨\n\n沒錯終於來到我們的主角\"數獨\"\n\n那天主要是我的同梯 \"添銘\" 和 \"玉霖\"，我們在玩數獨\n\n後來 \"添銘\" 說，有天他有解出一題與答案不一樣，但覺得是對的\n\n我們就去檢查了莫，因為邏輯上，一個數獨不可能有兩個答案\n\n如果存在的話那就是個爛題目（沒有啦，哈哈哈）\n\n而且通常這種狀況都是哪個地方眼花了填錯了之類的\n\n但那天我們檢查了超久，真心感覺是對了\n\n後來我就想說，下午與其來睡覺耍廢，不如寫個程式來解數獨吧\n\n當然軍中不可能給你帶電腦進去，所以我就用紙筆來寫\n\n開始手搓程式碼，其實稍微有點熟悉度來是做得到啦\n\n寫了一下後，放假後就把它打出來\n\n結果發現該題甚至不只兩種解答，而是有三種 !!!\n\n天啊，這個賣數獨的怎麼給這樣的題目阿！\n\n```text\n添銘 :\n    他都會看 \"富爸爸\" 但我都說他在看 \"當爸爸\"\n    可能他真的想當爸爸吧\n    然後他長得真的蠻帥的 很有型\n玉霖 :\n    他是牙醫，但我覺得他可以轉行當殺手\n    打靶手超穩的，不愧是經過專業訓練的\n    同時他是我的九天好夥伴\n```\n## 程序執行\n### 那驚人的題目\n```text\n數獨題目 (未知部分我直接使用空白鍵 避免畫面太亂)\n+-------+-------+-------+\n|   7   |   6   |   4 8 |\n|     8 |     7 | 5     |\n|       | 5     |     6 |\n+-------+-------+-------+\n| 8 9   |       | 3     |\n| 7     |   2   | 9   4 |\n|     3 |       |   1 5 |\n+-------+-------+-------+\n| 2     |     3 |       |\n|     6 | 2     | 4     |\n| 9 3   | 4     |     8 |\n+-------+-------+-------+\n```\n### 程序計算結果\n![sudoku-result](./assets/sudoku-result.png)\n\n## 程序解題思路\n程式使用深度優先搜索(DFS)配合回溯法來解題。主要步驟如下:\n\n1. 先將已知數字的位置記錄在 fixedPairs 集合中，這些位置後續不需要嘗試填入數字\n\n2. 從左上角(0,0)開始，依序往右遍歷每個格子:\n   - 如果是已知數字(在fixedPairs中)就直接跳到下一格\n   - 如果是空格就嘗試填入1-9的數字\n\n3. 每次填入數字前會檢查:\n   - 該行是否已存在相同數字\n   - 該列是否已存在相同數字  \n   - 該3x3方格內是否已存在相同數字\n\n4. 如果某個數字符合規則就:\n   - 將該數字填入格子\n   - 遞迴處理下一個位置\n   - 如果遞迴失敗就回溯(將該格重設為-1)並嘗試下一個數字\n\n5. 當遞迴到最後一格(row=9)時代表找到一組解，印出並繼續找下一組解\n\n\u003e 這種窮舉法雖然簡單但效率不高，好處是能找出所有可能的解答。\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fweiawesome%2Fsudoku_resolver","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fweiawesome%2Fsudoku_resolver","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fweiawesome%2Fsudoku_resolver/lists"}