缤纷彩带Strata——构造算法

以前写的老文,觉得有意思就放上来了。。

关于这个游戏的介绍和成就参见度娘:缤纷彩带
感觉是一个很高大上的游戏,抱着这样的心态去玩了几关。最开始有点摸不着头脑,几乎是胡乱试把答案试出来。然后多玩了几关之后,MS发现了一些规律。
先说一下游戏规则,给你一个N*N的矩阵(游戏里N最大为6)。每个格子里有一种颜色,总共有M种颜色。同时给你这M种不同颜色的彩带,你每次需要选择一种颜色的彩带,放在矩阵的某一行或者某一列,最终把每行每列都放满彩带(也就是放2*N条彩带)。由于每行每列都有一条彩带,那么每个格子上都会有两条彩带穿过,游戏所要求的,就是让每个格子中的颜色和这两根彩带中,靠上方的那个彩带颜色相同。我们来看一个很简单例子:


上图是一个2*2的谜题,解决方法就是现在1号位置放一条绿色彩带,然后在3号位置放一条绿色彩带,然后在4号位置放一条橙色彩带,最后在2号位置放一条红色彩带即可。放好之后的效果:

刚刚玩完2*2的时候,很多人都会觉得,这个到了后面随着组合越来越多,难度肯定会成指数级上涨。例如下图是一个5*5的谜题。。。

事实上我刚玩完2*2的时候就觉得3*3很难了。但是有了这个算法也就是小菜一碟了:

好了,接下来是重头戏,我们来看看这个游戏的正确打开方式:我们先提取游戏的几个关键性质:
性质1:每个格子 只会被2根彩带覆盖;
性质2:要求格子中的颜色和较上方的彩带颜色相同 ;
性质3:较下方的彩带颜色和格子的颜色没有任何关系;
性质4:有的格子没有颜色限制,我们认为这个格子可以是任意一种颜色;
由此我们推出2个关键定理:
定理1:第一条彩带的颜色没有任何限制。证明:由于第一条彩带放上去后,所有的彩带均在它上面。根据性质3,它的颜色不会影响解谜。
定理2:最后放置的一条彩带所放的那一行(列),必定均为同一种颜色。证明 :由于最后放置的那条彩带在所有彩带的上方。
根据性质2,它所在的那一行(列)的颜色都应该和这条彩带的颜色相同,因此这一排(列)的所有格子颜色都相同。其实这两个定理是很显然的,但是之后的推理还是证明了一下,觉得白痴的可以无视~好了,聪明的同学可能已经发现了解决这个谜题的方法了。根据定理2,可以得出最后一步该选什么颜色,以及放在什么位置。并且根据性质3,最后那一条彩带所在的那一行,其下方放哪些彩带是完全无关的,因此在剩下的问题中,那一整行我们实际上都可以忽略掉。将整个问题,转化为一个n*(n-1)的矩阵的谜题。之后的事情就是反复利用定理2,每次找颜色全部相同的一行(列),把它当作最后一步,然后忽略掉那一行(列),把问题规模继续缩小。直到最后矩阵会变成0*0的,那么整个谜题也就解决了。只不过我们在实际玩的时候和前面的思考过程的顺序是相反的,因为我每次都是找的最后一步,所以实际操作的顺序和思考顺序是相反的。
特别的,按照前面的步骤,还有一些位置可能还没有放置任何彩带。根据定理1,这些位置上的彩带颜色没有任何限制,可以随便选取颜色放置。接下来我们根据之前的推导,来解决上面发的那个5*5的矩阵谜题:
首先为了方便说明,给颜色和每一个放彩带的位置都编号显然,2号位置全都是第1种颜色。接下来把这一行无视掉,在剩下的4*5的矩阵中
8号位置全都是第3种颜色,10号位置全都是第2种颜色。它们的先后顺序没有影响。之后的过程完全类似,这里就不再演示,根据之前的推导过程我们一次得出每个子问题的“最后一步”是:
第1种颜色放在第2个位置
第3种颜色放在第8个位置
第2种颜色放在第10个位置
第3种颜色放在第1个位置
第4种颜色放在第9个位置
第2种颜色放在第3个位置
第1种颜色放在第5个位置
第3种颜色放在第6个位置
第2种颜色放在第4个位置

其中还有7号位置没有放置任何彩带,根据定理1,这一行可以放置任意颜色的彩带,我们就默认放第一种颜色。整个谜题的操作步骤,就是将上述分析步骤全部倒过来进行,即:
第1种颜色放在第7个位置
第2种颜色放在第4个位置
第3种颜色放在第6个位置
第1种颜色放在第5个位置
第2种颜色放在第3个位置
第4种颜色放在第9个位置
第3种颜色放在第1个位置
第2种颜色放在第10个位置
第3种颜色放在第8个位置
第1种颜色放在第2个位置
至此,这个游戏也算是完全破解了,思考难度降为0。游戏的难点,变成了记忆每一个步骤,然后全部倒过来操作。已经不再是介绍中所说的“考验大脑极限”,而是单纯的“考验记忆力极限”了(笑)。

你可能感兴趣的:(缤纷彩带Strata——构造算法)