最近买了一个叫做“华容道”的玩具给儿子晚。这个游戏虽然号称是中国四大古典智力游戏之一。其实不过百年历史,而且是从国外引进的。不过本地化做得非常好,也算是创造性地吸收国外文明。
手工解决这个游戏有点难度,当然已经有人给出了解法;不过我还是自己用编程的方式解决了一遍。发现自己在这方面的编程还是比较弱。大部分时间花在了调试上。
刚开始是用的深度优先搜索。大致知道了答案应该长什么样。后来改进为广度优先搜索,得到了最优的解法。还有一个就是原先只考虑每次最多移动一格。后来发现传统的定义是一个块的所有连续移动都算作一步。相应地修改了实现算法。
最难的是做界面。为了调试,随便写了个Applet。但是给我儿子玩,就觉得拿不出手了。