13648893846
发表于 2018-3-31 06:25:01
膜拜院长,顶出通用函数
xyp1964
发表于 2018-4-1 20:02:03
yxp 发表于 2018-3-30 13:10
回溯法
一、在第一个格子填上1,检查行、列和九宫格是否合法。如果合法,跳入下一个格子,从1开始测试;如 ...
穷举法的效率实在是太低了。实在不行了一般会用“试数法”
正常判断 方式:
唯余、宫摒除、行摒除、列摒除、行唯一、列唯一、宫唯一、宫双数摒除等方法。
效果:
000000980020010000004057010000000506019060340203000000080420100000070030076000000
xyp1964
发表于 2018-4-1 20:05:32
上图对应规则方法(从上到下从左到右,第1格为0,最后1格为80):
位置 28 : 唯余
位置 56 : 唯余
位置 64 : 唯余
位置 54 : 唯余
位置 46 : 宫摒除
位置 36 : 宫摒除
位置 1 : 宫摒除
位置 19 : 宫摒除
位置 53 : 宫摒除
位置 65 : 宫摒除
位置 2 : 列摒除
位置 26 : 唯余
位置 24 : 唯余
位置 34 : 宫摒除
位置 52 : 宫摒除
位置 78 : 宫摒除
位置 61 : 宫摒除
位置 62 : 宫摒除
位置 51 : 宫摒除
位置 16 : 宫摒除
位置 0 : 宫摒除
位置 9 : 宫摒除
位置 18 : 宫摒除
位置 11 : 宫摒除
位置 21 : 宫摒除
位置 17 : 宫摒除
位置 8 : 宫摒除
位置 15 : 宫摒除
位置 29 : 宫摒除
位置 27 : 宫摒除
位置 39 : 宫摒除
位置 41 : 宫摒除
位置 3 : 宫摒除
位置 5 : 宫摒除
位置 4 : 宫摒除
位置 50 : 宫摒除
位置 49 : 宫摒除
位置 48 : 宫摒除
位置 44 : 宫摒除
位置 66 : 宫摒除
位置 80 : 宫摒除
位置 59 : 宫摒除
位置 12 : 宫摒除
位置 14 : 宫摒除
位置 31 : 宫摒除
位置 30 : 宫摒除
位置 32 : 宫摒除
位置 76 : 宫摒除
位置 75 : 宫摒除
位置 63 : 宫摒除
位置 72 : 宫摒除
位置 79 : 宫摒除
位置 68 : 宫摒除
位置 77 : 宫摒除
位置 71 : 宫摒除
位置 69 : 宫摒除
yxp
发表于 2018-4-2 02:30:40
本帖最后由 yxp 于 2018-4-2 21:08 编辑
xyp1964 发表于 2018-4-1 20:05
上图对应规则方法(从上到下从左到右,第1格为0,最后1格为80):
位置 28 : 唯余
位置 56 : 唯余
穷举法确实慢,我的电脑解你的那个数独用了8秒。但也不是一无是处,好处是约束条件越少,速度越快(相当于没有回溯操作),如果是81个0,速度最快。
当已知四五个数字的数独(多解的情况),怎么快速求出一个解。宫摒除可能都没法排除,但是穷举法能最快的算出一个解。
10楼的程序执行效果:
mikewolf2k
发表于 2018-4-2 15:28:35
看起来也就是穷举法一种?按顺序一个个试,每试一个检查下是否符合规则,不符合就换一个数,都不符合就回溯一位,符合就继续下一个。不过动画里面的看起来不像穷举啊,并不是按顺序填的,而且速度很快。
前面的代码都全么?那么短?我的vba老长了~
zxmmelly
发表于 2018-4-6 17:14:08
好久没见院长的大作了
oistre
发表于 2018-8-7 12:47:37
厉害、非常厉害!
583775698
发表于 2018-8-7 21:34:39
院长什么时候把你的源码公布
buddhism8
发表于 2019-5-11 15:31:01
院长威武
jialun22
发表于 2019-8-4 03:45:42
lisp可以做的这么出神入化,膜拜一下