挑战编程解杀手数独
vb吧
全部回复
仅看楼主
level 1
ooo◎ooo
楼主
规则:1、每行,每列,每宫数字1-9不能重复,虚线框内的数字不能重复。
2、虚线框左上角的数字等于虚线框内所有数字之和。
2018年07月26日 04点07分
1
level 10
涐吢铱舊囿儚
这个也有点意思啊,限制条件蛮多的嘛。
有空试试。
2018年07月26日 08点07分
2
level 15
oshi001
厉害
2018年07月26日 23点07分
3
level 8
冰之源___
81元线性规划。。。
2018年07月27日 02点07分
4
吧务
level 13
《顾名思义》
上上个月,学校里有学生问我数独题怎么做我看的都比较简单,没想到,到你这里都成这样了。。
2018年07月28日 17点07分
5
《顾名思义》
对啊,我可以用vb解啊
2018年07月28日 17点07分
吧务
level 14
马云爱逛京东
我个人认为能借鉴一下
@初音✨七奈
的思路
2018年07月28日 17点07分
6
涐吢铱舊囿儚
你说上次“爱因斯坦问题”的那个思路?那恐怕没有可比性。
2018年07月28日 17点07分
初音✨七奈
确实没有可比性,我试着写了个代码,运行1分钟才出结果……
2018年07月29日 01点07分
涐吢铱舊囿儚
@初音✨七奈
这个确实有点麻烦……你说的1分钟,是IDE中运行还是编译后?如果IDE中运行1分钟出结果,还算是过得去的。我正在写一个代码,实际测试时发觉真没预想的那么简单,遇到不少逻辑问题。不过现在也基本上完全理顺了,就剩下码代码的事了。有可能编译后能在15秒内能出结果。
2018年07月29日 08点07分
初音✨七奈
@涐吢铱舊囿儚
确实是IDE中运行约1分钟出结果,不过是找到一个结果就算了,没有全部判断
2018年07月29日 08点07分
level 5
太纸长琴
bfs dfs?
2018年07月29日 23点07分
8
level 1
ccfg126
普通数独我会做,杀手还没试过
2018年07月30日 07点07分
9
level 8
冰之源___
我有一个Idea,等会用CPP实现一下
每次不枚举点的值,直接枚举每一行的情况,
时间复杂度可以从O( n^(n * n) )降至O( (n!) ^ n )
就是实现起来有些难度。
2018年07月30日 09点07分
10
level 15
初音✨七奈
根据某人要求,放上程序运行的结果
2018年07月31日 10点07分
11
涐吢铱舊囿儚
哈哈,这“某人”就是我呗。
2018年07月31日 12点07分
level 10
涐吢铱舊囿儚
终于搞定了。
编译后的程序约9秒算出(我的机子属于低配电脑 -_-!!!),在IDE中运行,约13秒。
费了老大的劲,才发现“正确组合被跳过”的原因,
原来前几天优化运算流程时,不小心给自己挖了很深的坑、然而自己却浑然不觉……
当然也要感谢 11楼 miku_con 给了正确答案参考,才能确定“被跳过”并找到Bug所在。
我还有一个优化流程的想法,也许能运行得更快,
不过暂时先放一下了,过几天再说罢……
2018年08月01日 08点08分
12
king007wl
可否提供一下程序代码
2021年03月21日 13点03分
涐吢铱舊囿儚
@king007wl
链接:(百度网盘)/s/1RuoqLeJW4fURvjIAImda3Q 提取码:azij 分享链接的前半部分自己补全,完整的链接会被吞,没办法。
2021年03月21日 15点03分
level 11
璐村惂鐢ㄦ埛_0748V5Z馃惥
我觉得这道题,最麻烦的不在于怎么解题。
而在于如何让用户方便的输入“虚线框”的范围……
注意输入的办法到也不少,问题是“方便”……
2018年08月02日 06点08分
13
ooo◎ooo
这个简单,虚线框范围用颜色区分就行
2018年08月02日 06点08分
璐村惂鐢ㄦ埛_0748V5Z馃惥
@ooo◎ooo
阁下的汉语可以再进修
2018年08月02日 06点08分
ooo◎ooo
@璐村惂鐢ㄦ埛_0748V5Z馃惥
就是用不同的颜色来区分不同的虚线框范围。
2018年08月02日 06点08分
level 1
ooo◎ooo
楼主
就像这样:
2018年08月02日 06点08分
14
ooo◎ooo
不过左上角的数字要标出来,用gdi+画个表格就像。
2018年08月02日 06点08分
level 1
ooo◎ooo
楼主
试试这个,难度好像更高一些
2018年08月03日 13点08分
16
涐吢铱舊囿儚
我认为并不存在“难度高低”的问题,能解决1个,那么所有的这种题都可以用同样的“思路”解决。只是目前我想到的方案只能是先填数、再验证相应区域的和值,用的仍然是一种“穷举”模式。这样“靠前”的组合就早点出结果、靠后的就得晚点(计算时间长些)出结果而已。
2018年08月03日 13点08分
ooo◎ooo
嗯,试一下这个,运行的时间一定会比刚才的长,要不试试
2018年08月03日 13点08分
涐吢铱舊囿儚
@ooo◎ooo
初步的规划代码出来了,编译后、不刷界面,约23秒。
调试运行、刷界面,发现大部分时间都在中间那行最左的那个宫中打转(感觉占了80%以上时间)……也许能解决它的问题,时间就能明显缩短些。
2018年08月04日 12点08分
涐吢铱舊囿儚
偶然发现:这回的“答案”不是唯一的……
我一个“先编译好”的程序,还有后来修改过的代码,发觉最终结果不一样(但肯定都是“正确的”)。
2018年08月04日 12点08分
吧务
level 12
sunruisunrui
我有一个思路,可以先分享一下。
首先,一个具有固定数值和的连续方块的集合我们称之为数值区。
大格子中的,3*3的正方形格子,我们称之为9宫格。
我们已知:
1.九宫格中的数字各自不相同
2.九宫格中的各个方向的数字和是定值:(1+2
+3
+4+5...+9=(1+9)*9/2=45)
3.某个格子确定了数字后,则此格子所在的行列的其它格子都不得出现这个数字
得到以下的思路:
首先对固定数值区进行划分,看看这个数值区包含多少个九宫格。这样每个九宫格中都需要时不同的数值:例如左下的值为24的区域,就有两个九宫格构成。
还有一些思路还在思考中,包括怎样判断枚举结束。终止条件是什么。
2018年08月03日 14点08分
17
sunruisunrui
分析下我们需要的函数。对于一个所有格子都在九宫格内的数值区,我们需要有一个函数生成所有可能的排列。 比如3个格子,数值是9的数值区,可能是: 1+2+3 +3 对最后的3进行分配 满足分配后的个数和前面相同,每个数字小于等于后面的数字。
2018年08月03日 14点08分
1
2
尾页