文后附有源代码下载地址,大家有更好的算法,可以发上来交流下。
主要是数学方面的算法改进,所以大家务必基于单线程,不要搞多线程,对于数学改进,单线程变多线程没有意义。
编译环境: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!