L3-004 肿瘤诊断 (30 分)(简单三维bfs)
发布时间
阅读量:
阅读量
在临床诊断肿瘤疾病的过程中, 评估肿瘤体积是一个核心步骤之一. 根据提供的病灶扫描切片中标注出的疑似肿瘤区域, 请对所标注区域进行体积评估.
输入格式:
四个正整数作为参数输入表示为M、N、L和T四个变量,并分别具有特定含义:其中M和N用于描述每个切片图像的空间分辨率(即每幅切片均为一个M×N像素矩阵),最大分辨率设置为1286×128像素;数量不超过60个的切片组由L表示;数值T设定了判断标准:当其体积低于设定值时会被跳过处理以避免误诊
请提供L张切片样本 每张切片可由一个M×N二维数组表示 其中数值为1的位置对应疑似肿瘤区域 考虑到各切片厚度一致 因此可以通过计算连通区域内的像素数量来估算体积 复杂之处在于可能存在多个独立肿瘤区域 对于每个区域大小超过或等于T的情况进行统计分析 两个像素被认为是‘连通的’ 如果它们有一个共同的切面 如下图所示 所有6个红色方块都与蓝色方块连通

输出格式:
在一行中输出肿瘤的总体积。
输入样例:
3 4 5 2
1 1 1 1
1 1 1 1
1 1 1 1
0 0 1 1
0 0 1 1
0 0 1 1
1 0 1 1
0 1 0 0
0 0 0 0
1 0 1 1
0 0 0 0
0 0 0 0
0 0 0 1
0 0 0 1
1 0 0 0
输出样例:
26
代码长度限制
16 KB
时间限制
1000 ms
内存限制
64 MB
【代码】
#include<iostream>
using namespace std;
int photo[130][130][65] = { 1 };
int xlist[7000000];
int ylist[7000000];
int zlist[7000000];
int fx[6] = { 0, 0, 0, 0, 1, -1 };//方向数组
int fy[6] = { 0, 0, 1, -1, 0, 0 };//方向数组
int fz[6] = { 1, -1 ,0, 0, 0, 0 };//方向数组
int mark = 2;
int ans = 0;
int n, m, l, t;
int seek(int x, int y, int z)
{
xlist[0] = x;
ylist[0] = y;
zlist[0] = z;
photo[x][y][z] = 2;
int count = 0;
int head = 0;
int tail = 0;
int nowx;
int nowy;
int nowz;
while (head >= tail)//队列
{
nowx = xlist[tail];
nowy = ylist[tail];
nowz = zlist[tail];
for (int i = 0; i < 6; i++)
{
int newx = nowx + fx[i];//移动
int newy = nowy + fy[i];//移动
int newz = nowz + fz[i];//移动
if (newx >= 0 && newx < m)
if (newy >= 0 && newy < n)
if (newz >= 0 && newz < l)//不超过边界
if (photo[newx][newy][newz] == 1)//1表示这个点有肿瘤
{
head++;//满足条件,将这个点作为新的起点,继续查找
xlist[head] = newx;
ylist[head] = newy;
zlist[head] = newz;
photo[newx][newy][newz] = 2;//2表示这个点已经访问过了
}
}
tail++;//使tail指向当前位置(这个新点)
}
return head + 1;//head表示这个数组最后一个元素的下标,+1则为这个数组中元素的个数,也就是肿瘤的个数,也就是肿瘤的体积
}
int main()
{
cin >> m >> n >> l >> t;
for (int i = 0; i < l; i++)
{
for (int j = 0; j < m; j++)
{
for (int k = 0; k < n; k++)
{
cin >> photo[j][k][i];
}
}
}
for (int i = 0; i < l; i++)
{
for (int j = 0; j < n; j++)
{
for (int k = 0; k < m; k++)
{
if (photo[j][k][i] == 1)
{
int volumn = seek(j, k, i);
if (volumn >= t)
ans += volumn;
}
}
}
}
cout << ans << endl;
return 0;
}
全部评论 (0)
还没有任何评论哟~
