HDOJ 3647 (2010ACM 杭州网络预选) Tetris 深搜 + 剪枝

题目描述:
        一个规模为 W*H 的长方形 , 其中 W*H=40;
      然后游戏依次随机生成10个块,这10个块为以下之一:
   
     题目特别限制:不能使后面方块的某个格子在前面方块的下面。
     求给定的这十个块能否拼成一个W*H的长方形。
题目分析:
                 首先规模不大,方块有10个,长方形面积为40,所以考虑深度优先搜索!
                 考虑到方块的旋转,比如 I 可以旋转变成 ---- , 上述7种方块一共可以形成19种放置方式。
           我们可以将这19种放置方式的位移向量用静态数组表示出来。
                  搜索顺序为依次从每一列选取未方格位置的最低点,在该位置放入给定方块,通过约束条件
           进行剪枝,进入下一层深度搜索。
                  有一个比较简单的剪枝:若在放置方块P后,若在长方形中造成了空洞,则应该剪去。这很容
           易判断,放置后,下方为空,则剪枝。
参考程序: 

          
          

posted on 2010-10-04 19:09 IronOxide 阅读(380) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2010年10月>
262728293012
3456789
10111213141516
17181920212223
24252627282930
31123456

导航

统计

常用链接

留言簿

随笔分类

随笔档案

ACMer

方向

搜索

最新评论

阅读排行榜

评论排行榜