跟朋友最近聊起來數獨游戲,突發奇想使用python編寫一個自動計算數獨解的小程序。
數獨的規則不再過多闡述,在此描述一下程序的主要思路:
(當前程序只針對于簡單的數獨,更復雜的還待深入挖掘)
1.計算當前每個空格可能的取值集合,并將空格順序值對應取值集合置于字典中;
2.對取值集合位數為1,即空格處為單一取值的進行賦值,(填入動作),重復1刷新字典直到字典為空位置;
當前實現如下:
1.將數獨輸入列表中,并定義函數count_candinate_number(j)根據數獨規則計算每一個為0的位置的當前可能取值:
2.定義函數求解對應每個為0的位置的可能求解,并將位置信息與可能求解以鍵-鍵值的形式存儲于字典中:
3.對每一個位置的可能求解進行判斷,若可能解只有一個,則填入該解,循環直至數獨求解完成
程序運行結果:
D:\pythonwokr\venv\Scripts\python.exe D:/pythonwokr/數獨.py
已求解 [6, 2, 7, 5, 1, 4, 9, 8, 3, 5, 4, 8, 9, 3, 7, 2, 6, 1, 3, 9, 1, 6, 8, 2, 4, 7, 5, 4, 1, 2, 3, 7, 5, 8, 9, 6, 9, 7, 6, 1, 2, 8, 5, 3, 4, 8, 5, 3, 4, 9, 6, 7, 1, 2, 2, 6, 9, 7, 4, 1, 3, 5, 8, 1, 3, 4, 8, 5, 9, 6, 2, 7, 7, 8, 5, 2, 6, 3, 1, 4, 9]
Process finished with exit code 0