数独快速随机出题的算法



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

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值