填数字游戏解题机

填数字游戏解题机

  它,是填数字游戏解题机,是本人设计和制作的一种可以解决所有填数字游戏的工具软件。

  许多题目/游戏都可以化成填数字游戏。比如幻方、数独、八皇后问题。他们的特点就是拿着一些卡片往一张地图上面填,填了之后就不能移动了。填错之后的移动卡片,不属于这里讲的移动。另一类带有移动的或者吃子的就不属于填数字游戏,比如华容道(一款游戏)有移动,围棋有吃子,象棋既有移动也有吃子。

  有了它,直接或者少量地扩展代码就能解决几乎任意填数字游戏,而且由于它采用高级思维,所以解题速度不会很慢。

它的解题思路是什么?

  我们知道人脑的运算速度是很慢的,同时人脑也是很聪明的。比如说,像解数独的时候,人会去寻求比较容易算的格子,然后再去推断其他比较容易算的格子。还发明和应用了很多的法则,可以说这个思考过程是复杂而高级的。经过大自然的筛选和淘汰,证明这种思考方式是行之有效的。制作它的时候,希望模拟这种高级的思维方式。反之,越简单的程序,运行的越快,但是就越接近于穷举,在局部看起来非常快,在整体就显得非常慢了。找一千以内的某个整数,计算机解起来很简单,把1000个数挨个试一遍就行了,而且速度很快。但是人,就不是这么做。人会根据题目,对1000个数进行大量的排除,之后再对剩下的少量的数进行挨个的试。人的解题方式在解决答案的搜索空间更大的题目的时候,更显示出优势。所以,在解决简单问题的时候,局部的快慢起了决定性的因素,而在解决复杂问题的时候整体的快慢才是关键所在。

  它的整体解决思路是在能应用高级思维的时候,都尽量的使用高级思维,实在不行了,再使用穷举。也就是说穷举是一种兜底的解决方式,是最后的选项。

  应用高级思维,主要在以下这几点:

  1. 根据游戏的规则,先排除掉在当前格不可能正确的数字,而不是不管规则把所有能填的数字,都在当前格试一下。
  2. 尽早的发现当前已填的数字的不合理性,减少不必要的,后续的尝试。比如填上当前的数字,都符合规则的要求,但是后面的某些格,哪怕填上最小的数字(根据某条游戏规则)都不够小,那么也就证明当前填的这个数字是不对的。
  3. 每次填了一格之后,可以决定接下来填哪一格。并且在后续的搜索中,如果走进死胡同也能够正确地返回,即是正确的回溯。

为什么要做它?

  玩编程十多年来,做过许多大大小小的算法题。已经有点腻了,没新鲜感了。再去写程序解决具体的题目显得有些没意思。要做就做能解决很多题目的程序。

  穷举是最容易想到的通用的解决方案,他解决一些很简单的问题还行,解决一些稍微复杂的问题,就会由于需要的计算时间太长而放弃,比如需要计算200年。而人脑,会用以自己的方式去解决这些复杂的问题,有时候效果比计算机好很多。所以这个是我自己反思人脑解决问题的一个过程,并把思考的结果写成程序。它的最大的难点在于需要提取通用的思维方式,而不能引入解决具体问题的特有方式。

目前还有哪些没做好的?

  • 系统还没有集成“填了当前这一格后,选择接下来填哪一格”这个机制。
  • 如何使用户在使用现有类解决具体问题的时候,写的代码尽可能少。

如何下载和运行,如何修改代码解决具体的问题,源码下载,请到这里 //gitee.com/billysir/puzzle-solving-machine