C语言写的程序,2009年 i3 的处理器,出100道题,4.139秒。
算法步骤:
1、初始化数据。
2、向盘面中随机填入n个数。(这里的随机当然不是完全随机,不然盘面是无解的,n是多少,也要凭经验,考虑后续算法的时间)
3、求解当前盘面的解的个数。
3.1、如果解的个数是1,则跳到6。
3.2、如果解的个数是0,转到1。
3.3、如果解的个数大于1,则求出两个解。
4、比较两个解中的数字差异,将相异的位置的数,任取一个,填入原始盘面中。
5、再次求解盘面中解的个数。
5.1、如果解的个数大于1,求出两个解,跳至4。
5.2、如果解的个数是1个,至6。
6、从当前盘面有数的位置,依次挖去一个。
6.1、再次求解盘面中解的个数。
6.1.1、如果是多个解,则把挖去的数补回,然后跳到6。
6.1.2、如果是1个解,则跳至6。
7、输出当前盘面。
为了减少题目的难度,第6步可省。
100道题,4.139秒是执行了第6步,相当部分题目难度值超过了2000。当然,不执行第6步,出的题目要简单得多,出题时间也快很多。
好吧,贴几个超高难度的题目:
000860000005000000300000750060000409700130006000200000000000031180300000000702000
000300000206070000050000402000000023000600800831000045000080006009067000700200300
900030006058040000000009502500900003013005000070000000000004070042600000000720100
060000000004020580050090702007000000600100000010080904003000050900300400500240600
000060010006003200250080400030002800800004007000900041008000730000000000907040005
500600000003010000001370080097000130230000094000400700008007240962000000000080000