地毯填补问题

Grade 0 Open Time Sunday, 10 July 2011, 3:40 pm
Discount 0.8 Time Discount Sunday, 10 July 2011, 3:40 pm
Allow late Yes Close Time Sunday, 10 July 2011, 3:40 pm

【问题描述】

相传在一个古老的阿拉伯国家里,有一座宫殿。宫殿里有个四四方方的格子迷宫,国王选择驸马的方法非常特殊,也非常简单:公主就站在其中一个方格子上,只要谁能用地毯将除公主站立的地方外的所有地方盖上,美丽漂亮聪慧的公主就是他的人了。公主这一个方格不能用地毯盖住,毯子的形状有所规定,只能有四种选择 ( 如图 ) :

地毯

并且每一方格只能用一层地毯,迷宫的大小为 2 k*2 k 的正方形。当然,也不能让公主无限制的在那儿等,对吧?由于你使用的是计算机,所以实现时间为 1s 。

【输入】

输入文件共 2 行。

第一行: k ,即给定被填补迷宫的边长为 2k ( 0 < k ≤ 10 ) ;

第二行: x y ,即给出公主所在方格的坐标 ( x 为行坐标, y 为列坐标 ) , x 和 y 之间有一个空格隔开。

【输出】

将迷宫填补完整的方案:

每一补 ( 行 ) 为 x y c,其中x , y 为毯子拐角的行坐标和列坐标, c 为使用毯子的编号(上面的图),编号用1 、 2 、 3 、 4 表示, x 、 y 、 c 之间用一个空格隔开 ) 。

【样例】

blank.in:

3

3 3

blank.out:

1 1 4

4 1 1

1 4 2

4 4 3

2 2 4

5 5 3

5 1 4

8 1 1

6 3 1

7 2 1

8 4 3

1 5 4

3 6 2

2 7 2

1 8 2

4 8 3

6 6 3

7 7 3

8 5 1

5 8 2

8 8 3

样例说明见下图(其中公主站在图中标X处):

样例说明

分析:

由于正方形连长2的几次方,所以我们可以将原问题划分成四个小问题,以样例作为演示,见下图:

分析

很显然,将大正方形对半分割成4个小正方形后,原来的公主肯定在四个小正方形之中的某一个,则我们将其它三个小正方形在最靠近中心的位置贡献出来,其它地方用地毯铺满即可,最后再来铺三人各贡献出来的那3个小方块,不管三个小正方形是何种位置,我们总能够找到1,2,3,4号地毯将它完全盖住,这样我们就将原问题划分成了四个一模一样的小问题了:即用1,2,3,4号地毯去盖一个正方形,除指定的那一块不盖,其它都盖满。

然后再设计递归函数可以完美解决。