SP15636 GNYR04I - Histology Assistant
题目描述
一个用于组织样本分析的应用程序的工作流程如下:首先扫描并识别组织病理数字照片中的染色像素。接着,为每个染色像素的群组成的区域绘制轮廓。然后,对这些轮廓进行分析以寻找疾病的特征,并将经过颜色编码的可能疾病标识的轮廓叠加在显微照片上展示给病理学家。
你的任务是编写一个程序,该程序需能够处理由染色与未染色像素组成的图像,确定并输出所有染色像素区域的轮廓。小于给定最小尺寸的染色像素区域将被忽略。我们只需要计算外边界,内部的空洞不予考虑。
如果一个像素紧邻另一个像素的上、下、左或右位置,则称其为相邻。两个染色像素是连通的,是指存在一条由染色像素组成的路径,起点为一个像素,终点为另一个像素,并且路径上任意两像素都是相邻的。一个染色像素区域是指一个连通的染色像素集合,与其中一个染色像素相连。边界像素是指其至少有一个相邻的像素未被染色。(位图外的所有像素均视为未染色,因此位图边缘的像素也算作边界像素。)例如,在下图中,有4个区域(`X` 表示染色像素,`.` 表示未染色像素)。
```
........................................
.XX.....................................
..X.................XXX......XXX........
.....................XXX....XXX.........
.......XXX............XXX..XXX..........
.....XXXXXXX...........XXXXXX...........
....XXXXXXXXX...........XXXX............
...XXXX...XXXX...........XX.............
..XXX.......XXX.........................
..XXX.......XXX........XXXXXXX..........
.XXX.........XXX.......XXXXXXX..........
.XXX.........XXX.......XXXXXXX..........
.XXX.........XXX.......XXXXXXX..........
..XXX.......XXX...........X.............
..XXX.......XXX...........X.............
...XXXX...XXXX.........XXXXXXX..........
....XXXXXXXXX..........XXXXXXX..........
.....XXXXXXX...........XXXXXXX..........
.......XXX.............XXXXXXX..........
........................................
```
轮廓的表达方式如下:区域的最上面一行中最左边的点、边界像素数量以及从一个边界像素到下一个边界像素顺时针移动的方向代码(向上 = A,向右上 = B 等):
```
H A B
G C
F E D
```
从上到下的行从1开始编号,从左到右的列也从1开始编号。例如,上面图案中的 `v` 形区域的轮廓表示为:
```
3 21 22
CCDDDCBBBCCFFFFFGHHHHH
```
输入格式
输入包含多个问题实例。每个实例由一行开始,该行由3个十进制数给出:行数、列数和最小像素数量。紧接着是包含行数行的字符矩阵。每个字符要么是表示未染色像素的句号(`.`),要么是表示染色像素的 `X`。当行数为0时,输入结束。行数最多为47,列数最多为63,最小像素数至少为2。
输出格式
对每个问题实例,先输出一个整型数,表示至少有给定最小像素数量的染色像素���域的数量。然后描述每个区域的边界。区域按“先行后列”,即从左到右、从上到下的顺序输出。对于每个区域,首先输出一行,给出起始像素的行号、列号和边界像素的数量,以单个空格分隔。后续的行按方向代码 `A` 到 `H` 表示。每行最多40个字符,最后一行可少于40个字符。
## 输入样例
```
20 40 4
........................................
.XX.....................................
..X.................XXX......XXX........
.....................XXX....XXX.........
.......XXX............XXX..XXX..........
.....XXXXXXX...........XXXXXX...........
....XXXXXXXXX...........XXXX............
...XXXX...XXXX...........XX.............
..XXX.......XXX.........................
..XXX.......XXX........XXXXXXX..........
.XXX.........XXX.......XXXXXXX..........
.XXX.........XXX.......XXXXXXX..........
.XXX.........XXX.......XXXXXXX..........
..XXX.......XXX...........X.............
..XXX.......XXX...........X.............
...XXXX...XXXX.........XXXXXXX..........
....XXXXXXXXX..........XXXXXXX..........
.....XXXXXXX...........XXXXXXX..........
.......XXX.............XXXXXXX..........
........................................
12 40 4
.X.X.X.X.X.X......XX...XXXXXXXXXXXXXXXX.
.XXX.XXX.XXX......XX..XXXXXXXXXXXXXXXXXX
.X...X...X........XX..XX.............XXX
.X.X.X.X.X.X......XX..XX...XXXXXXXX...XX
.XXX.XXX.XXX......XX..XX..XXXXXXXXXX..XX
.X...X...X........XX..XX..XX......XX..XX
.X.X.X.X.X.X......XX..XXX........XXX..XX
.XXX.XXX.XXX......XX..XXXXXXXXXXXXXX..XX
.X...X...X........XX...XXXXXXXXXXXX...XX
.X.X.X.X.X.X......XXX................XXX
.XXXXXXXXXXX......XXXXXXXXXXXXXXXXXXXXXX
...................XXXXXXXXXXXXXXXXXXXX.
0 0 0
```
## 输出样例
```
3
3 21 22
CCDDDCBBBCCFFFFFGHHHHH
5 8 36
CCDCDDDEDEEFEFFFGFGGHGHHHAHAABABBBCB
10 24 38
CCCCCCEEEGGFEDCCEEEGGGGGGAAACCBAHGGAAA
2
1 2 103
DBEGFEDBEGFEDBEGFEDBDBAAAAAAAAADBEGFEDBE
GFEDBEGFEDBDBAAAAAAAAADBEGFEDBEGFEDBEGFE
DBEGGGGGGGGGGAAAAAAAAAA
1 19 159
CEEEEEEEEDDCCCCCCCCCCCCCCCBBAAAAAHHGGGGG
GGGGGGGFEEEDDCCCCCCCBBHGGGGGFGABCCCCCCCD
EEEFGGGGGGGGGGGHAAAAAABCCCCCCCCCCCCCCCDE
EEEEEEEEFGGGGGGGGGGGGGGGGGGGHAAAAAAAAAA
```
**本翻译由 AI 自动生成**