寫一個數獨計算器


終於有點閑暇的時間,翻翻以前的代碼,突然看到有個好久以前寫的數獨計算器,一邊感嘆時光飛逝,一邊心中默默的噴自己:這些年都把自己糟蹋了。

不扯了,老習慣,代碼放在最后了,先上圖:

特點:1.可視化計算方式,可以單步執行也可以,也可以全部快速計算

        2.提供同值檢測功能,高亮提醒輸入的錯誤值

        3.提供計算解釋日志功能

        4.隨代碼提供大量數獨資源,可以自定義選擇、加載,還可以隨機選擇

算法說明:

  1. 先將所有的格子進行如下定義,每個格子叫square,每行叫row,每列叫column,一個square所關聯的Row,column,和那個九宮格都叫做Unit,而這些row,column和Unit的總和叫做Peers。
  2. 對於空的格子,每個格子都會有123456789出現的情況,而已經選定的格子,則值是唯一的。開始計算時,先選定有數字的格子,然后在這個格子所在的Peers中刪除這個數字。比如在第一行的第一個是1,第二個的可能性是123456789,那么在第二個的可能性里面刪除1,變成23456789。
  3. 遍歷每個值未定的square,找到格子中可選值最少的返回,如果是可選數為1,則該格子唯一被確定,並刪除Peers中其他格子中的該值得選項,
  4. 如果獲取的格子可選數大於1,則選擇其中的一個值,作為確定值,並把其他值連同坐標,以及當前整個軟件中的每個格子的情況進行記錄,然后推送到棧結構中,然后繼續執行。
  5. 如果返回格子的可選值為空,這是因為剛才選擇的值有問題,所以需要進行一次出棧操作,提取剩余值,並將軟件中每個格子的值初始到記錄該值之前,繼續進行判斷,直到每個格子中有符合規則的唯一的值時,既可以判定計算完成。
  6. 如果返回的格子可選值為空,而棧中的值也為空,那么就可以判斷該數獨無解。 

代碼地址:https://github.com/Twzy/SudokuPlayer 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM