1.题目描述:点击打开链接
2.解题思路:本题只给了六个视图,要求找最大的立方块数,看上去貌似很棘手的一个问题。我们可以尝试用排除法,如果删到不能删除时,那么剩下的立方块自然就是最多的。由于视图中为‘.'的地方一定可以看穿,因此可以把这些能看穿的位置的立方体先去掉。接下来,题目还已知了一个小立方块的六个面都是同色的,如果发现某个立方体存在两个面不同色,那么说明该位置的立方块肯定不存在。把该位置的立方块删除之后,会暴露出新的表面,是它相邻的立方块的表面。假设其中一个相邻的立方体在第二轮检查中发现了存在两个面的颜色不同的状况,说明它也不存在,以此类推,直到某一轮检查中不再存在这样的矛盾时,剩下的立方块就是最多的,当然也是最重的时候。
由此,根据上面的思路,我们可以用一个get函数寻找第k张视图的位置(i,j)处看下去,高度为len的那个位置的三维坐标,这样便于后期的处理。主函数中可以先初始化一个完完整整的立方体,而且每个立方块都没有被涂过色。第一步,先删除肯定不存在的立方体;第二步,开始若干轮的检查,看是否有矛盾面出现。如果第一次遇到时该位置的立方体还未涂过色,那就先涂上此时的颜色;若该位置的立方体已经涂过色且和当前枚举的视图位置的颜色吻合,那么跳过;若不一致,就找到了矛盾面,删除该位置的立方块,并标记本轮检查失败。如果在某一轮检查中没有矛盾面了,说明本轮检查成功,退出循环。最后