小题一道--进来坐坐--进来做做
假如我们拥有一座笔直街道的方形城市。地图上城市是方形的,由n行和n列组成,每个点都代表一条街道或是一堵墙。
有一座木制的小城堡有四个开着的能射穿的窗户。四扇窗户各朝着北,东,南,西。有一把枪能射穿每扇窗户。
现在我们确定一颗子弹有太大的威力以至于能射穿任何距离一条直线上的城堡。另外,我们也知道了一堵墙很坚固,以至于能挡住子弹。
目的是在城市中放置尽可能多的城堡,以使他们任何两个都不会同时被摧毁。城堡位置的构造被正常的提供,使任两个城堡不会在同一行或同一列上,除非有一堵墙将他们分隔开来。在这个问题中我们将考虑小方形城市(至多为4*4)包含墙在内不能被子弹穿过。
下面的图展现了5张同一组形状。第一张图是空的形状,第二张和第三张图展现了正常的结构。在这张图中,合法构造的最大城堡安置数为5,而第二张图就是展现一个最大数的情况,但还有许多个方法。
你的任务是写一个程序,给你地图的描述,计算这个城市中合法构造的最大城堡安置数。输入文件包括1个或多个地图描述,并以一行0的数字作为文件结束的信号。每张地图描述以一行有一个整数开始,它表示一个城市的大小。n最多为4。接下去的n行,每行描述一行地图,
用‘.’代表一个空的位置,一个大写的‘X’代表一堵墙。输入文件中没有空行。
每组测试,输出一行,包含了一个城市中合法构造的最大安置数量。
Sample input
4
.X..
....
XX..
....
2
XX
.X
3
.X.
X.X
.X.
3
...
.XX
.XX
4
....
....
....
....
0
Sample output
5
1
5
2
4
[此贴子已经被作者于2007-6-29 21:30:59编辑过]