类似2048这样的智力小游戏,最近挺火。我一nb室友(在职BAT)也写了一款:Inverter , 玩起来感觉没有2048有意思,但是用计算机玩总是有那么点意思滴 :)
规则:1. 点击任何一个格子,它自身及上下左右4个格子翻转颜色,最后全部翻转成蓝色即过关。
界面:
关键算法:
(1)每个格子最多只需点击一次,即可过关。试玩会儿就会发现,如果某个格子点击了一次,就不必点击第二次(如果点击第二次了,你肯定要点击第三次把颜色翻转过来)。每个格子被点击次数是奇数的话,就是亮的;偶数,就是暗的。
(2)次序无关。最终的结果至于每个格子被点击的次数有关,这个应该很容易理解。
(3)如果第一行确定了,整个方案就确定了(如果行得通的话)。这点对于程序性能来说非常非常重要,最初的时候没有发现这点,程序算的贼慢!原因分析:由于是“十字”覆盖,只有“up”一个节点在当前点击节点的前行,我们可以考虑这样一种思路:每点击一行,前面的一行要全部亮起来(即全部变成蓝色)。顺着这个思路,除了第一行,其他行只需点击前一行没有亮的格子的正下方的格子即可。这样一来,程序中只须枚举第一行即可。(如果考虑对称的话,可以去掉将近一半的可能解)
前几阶的一种解法:
代码:
(稍后整理下再发)
更多: