例题1.6 立方体成像 UVa1030

1.题目描述:点击打开链接

2.解题思路:本题只给了六个视图,要求找最大的立方块数,看上去貌似很棘手的一个问题。我们可以尝试用排除法,如果删到不能删除时,那么剩下的立方块自然就是最多的。由于视图中为‘.'的地方一定可以看穿,因此可以把这些能看穿的位置的立方体先去掉。接下来,题目还已知了一个小立方块的六个面都是同色的,如果发现某个立方体存在两个面不同色,那么说明该位置的立方块肯定不存在。把该位置的立方块删除之后,会暴露出新的表面,是它相邻的立方块的表面。假设其中一个相邻的立方体在第二轮检查中发现了存在两个面的颜色不同的状况,说明它也不存在,以此类推,直到某一轮检查中不再存在这样的矛盾时,剩下的立方块就是最多的,当然也是最重的时候。

由此,根据上面的思路,我们可以用一个get函数寻找第k张视图的位置(i,j)处看下去,高度为len的那个位置的三维坐标,这样便于后期的处理。主函数中可以先初始化一个完完整整的立方体,而且每个立方块都没有被涂过色。第一步,先删除肯定不存在的立方体;第二步,开始若干轮的检查,看是否有矛盾面出现。如果第一次遇到时该位置的立方体还未涂过色,那就先涂上此时的颜色;若该位置的立方体已经涂过色且和当前枚举的视图位置的颜色吻合,那么跳过;若不一致,就找到了矛盾面,删除该位置的立方块,并标记本轮检查失败。如果在某一轮检查中没有矛盾面了,说明本轮检查成功,退出循环。最后

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值