文后附有源代碼下載地址,大家有更好的算法,可以發上來交流下。
主要是數學方面的算法改進,所以大家務必基于單線程,不要搞多線程,對于數學改進,單線程變多線程沒有意義。
編譯環境:vs2022,c++。
數獨題目填寫在代碼的這個位置:
int main()
{std::cout << "Hello World!\n";// 題目。需要填寫的位置就是0。int suduku[9][9] = {{0,0,6,0,0,8,4,0,0},{0,0,0,9,0,0,0,0,0},{1,0,2,0,0,4,0,0,0},{5,0,8,0,0,3,0,0,0},{0,2,3,7,9,0,0,8,0},{0,7,0,0,0,0,0,6,0},{0,0,0,2,8,0,3,0,0},{0,0,0,4,0,1,0,5,6},{0,0,0,0,0,0,0,9,0}};
輸出結果:(“列、小宮格,均無重復”內容后面的就是數獨答案)
Hello World!
2024年 6月29日6周180天14時15分34秒0夏令時 0單次耗時(毫秒) 0總耗時(毫秒)填充數據,每行362880種變化。
2024年 6月29日6周180天14時15分35秒0夏令時 963單次耗時(毫秒) 965總耗時(毫秒)記錄完整節點,用于最后釋放資源。
2024年 6月29日6周180天14時15分35秒0夏令時 215單次耗時(毫秒) 1182總耗時(毫秒)根據題目的數字,剔除不需要的變化。
2024年 6月29日6周180天14時15分37秒0夏令時 1594單次耗時(毫秒) 2779總耗時(毫秒)每行剩余變化的數量。
row 0 = 94
row 1 = 2206
row 2 = 68
row 3 = 66
row 4 = 4
row 5 = 298
row 6 = 104
row 7 = 16
row 8 = 2348
2024年 6月29日6周180天14時15分37秒0夏令時 1單次耗時(毫秒) 2781總耗時(毫秒)從變化最少的行開始,邊枚舉邊剔除。
2024年 6月29日6周180天14時15分45秒0夏令時 8675單次耗時(毫秒) 11458總耗時(毫秒)列、小宮格,均無重復:
736518429
845972631
192364578
568123947
423796185
971845263
657289314
289431756
314657892
2024年 6月29日6周180天14時16分 6秒0夏令時 20580單次耗時(毫秒) 32039總耗時(毫秒)釋放資源。
2024年 6月29日6周180天14時16分 6秒0夏令時 365單次耗時(毫秒) 32406總耗時(毫秒)Hello World!