#P1111. Image Perimeters
Image Perimeters
描述
病理实验室的技术人员会分析数字化的玻片图像。通过鼠标点击玻片上的对象来选择要分析的对象。对象边界的周长是一项有用的测量指标。你的任务是确定所选对象的周长。
数字化的玻片将由一个矩形网格表示,其中点号“.”表示空白区域,大写字母“X”表示对象的一部分。以下是一些简单的示例:
XX 网格 1 .XXX 网格 2 XX .XXX .XXX ...X ..X. X...
网格方格中的“X”表示整个网格方格(包括其边界)都属于某个对象。下面网格中心的“X”与它周围个位置中的任何一个“X”相邻。任意两个相邻“X”所在的网格方格在一条边或一个角上重叠,因此它们是相连的。
XXX XXX 中心的 X 和相邻的 X XXX
一个对象由所有通过相邻“X”序列相互连接的“X”所在的网格方格组成。在网格1中,整个网格被一个对象填满。在网格2中有两个对象。一个对象仅包含左下角的网格方格。其余的“X”属于另一个对象。
技术人员总是会点击一个“X”来选择包含该“X”的对象。点击的坐标会被记录下来。行和列的编号从左上角开始,从开始计数。技术人员可以通过点击第行第列来选择网格1中的对象。可以通过点击第行第列来选择网格2中的较大对象。但不能点击第行第列。

一个有用的统计量是对象的周长。假设每个“X”对应一个边长为个单位的正方形。因此,网格1中的对象周长为(四条边各为)。网格2中较大对象的周长如左图所示,长度为。
对象不会包含任何完全封闭的空洞,因此下面左侧显示的网格图案不可能出现,而右侧的变体是可能出现的:
不可能出现的情况 可能出现的情况 XXXX XXXX XXXX XXXX X..X XXXX X... X... XX.X XXXX XX.X XX.X XXXX XXXX XXXX XX.X ..... ..... ..... ..... ..X.. ..X.. ..X.. ..X.. .X.X. .XXX. .X... ..... ..X.. ..X.. ..X.. ..X.. ..... ..... ..... .....
输入
输入将包含一个或多个网格。每个网格之前有一行,包含网格的行数、列数以及鼠标点击的行和列。所有数字的范围在之间。网格的行从下一行开始,由“.”和“X”字符组成。
输入的结束由包含四个零的一行表示。任意一行上的数字用空格分隔。网格行中不包含空格。
输出
对于输入中的每个网格,输出包含一行,显示指定对象的周长。
输入示例
2 2 2 2
XX
XX
6 4 2 3
.XXX
.XXX
.XXX
...X
..X.
X...
5 6 1 3
.XXXX.
X....X
..XX.X
.X...X
..XXX.
7 7 2 6
XXXXXXX
XX...XX
X..X..X
X..X...
X..X..X
X.....X
XXXXXXX
7 7 4 4
XXXXXXX
XX...XX
X..X..X
X..X...
X..X..X
X.....X
XXXXXXX
0 0 0 0
输出示例
8
18
40
48
8
来源
2001年美国中北部地区竞赛