L3-004 肿瘤诊断 (30 分)(bfs)

简介: L3-004 肿瘤诊断 (30 分)(bfs)

在诊断肿瘤疾病时,计算肿瘤体积是很重要的一环。给定病灶扫描切片中标注出的疑似肿瘤区域,请你计算肿瘤的体积。


输入格式:

输入第一行给出4个正整数:M、N、L、T,其中M和N是每张切片的尺寸(即每张切片是一个M×N的像素矩阵。最大分辨率是1286×128);L(≤60)是切片的张数;T是一个整数阈值(若疑似肿瘤的连通体体积小于T,则该小块忽略不计)。


最后给出L张切片。每张用一个由0和1组成的M×N的矩阵表示,其中1表示疑似肿瘤的像素,0表示正常像素。由于切片厚度可以认为是一个常数,于是我们只要数连通体中1的个数就可以得到体积了。麻烦的是,可能存在多个肿瘤,这时我们只统计那些体积不小于T的。两个像素被认为是“连通的”,如果它们有一个共同的切面,如下图所示,所有6个红色的像素都与蓝色的像素连通。

c3084867f9a232c7ae160559c054d625.jpg


输出格式:

在一行中输出肿瘤的总体积。


输入样例:

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


思路:首先确定一个点,然后由这个点向六个方向遍历与之相连1的数量

#include<bits/stdc++.h>
using namespace std;
int dx[]={1,-1,0,0,0,0};//六个方向的偏移量
int dy[]={0,0,1,-1,0,0};
int dz[]={0,0,0,0,1,-1};
int g[1300][130][60],vis[1300][130][60];
int m,n,l,t;
struct node
{
    int x,y,z;
};
int bfs(int x,int y,int z)//搜索肿瘤的连通体体积
{
    node t={x,y,z};
    int res=0;
    queue<node>q;
    q.push(t);
    vis[x][y][z]=1;
    while(q.size())
    {
        res++;
        node f=q.front();
        q.pop();
        for(int i=0;i<6;i++)
        {
            int a=f.x+dx[i];
            int b=f.y+dy[i];
            int c=f.z+dz[i];
            if(a>=0&&a<m&&b>=0&&b<n&&c>=0&&c<l&&!vis[a][b][c]&&g[a][b][c])
            {
                node t1={a,b,c};
                vis[a][b][c]=1;
                q.push(t1);
            }
        }
    }
    return res;
}
int main()
{
    cin>>m>>n>>l>>t;
    for(int k=0;k<l;k++)
        for(int i=0;i<m;i++)
            for(int j=0;j<n;j++)
                cin>>g[i][j][k];
    int ans=0;
    for(int k=0;k<l;k++)
    {
        for(int i=0;i<m;i++)
        {
            for(int j=0;j<n;j++)
            {
                if(g[i][j][k]&&!vis[i][j][k])
                {
                    int d=bfs(i,j,k);
                    if(d>=t) ans+=d;//体积不小于t的
                }
            }
        }
    }
    cout<<ans;
    return 0;
}


目录
相关文章
|
7月前
|
算法 安全 测试技术
[组合数学]LeetCode:2954:统计感冒序列的数目
[组合数学]LeetCode:2954:统计感冒序列的数目
|
7月前
|
机器学习/深度学习 算法
【算法 | 实验7】以最小的步骤收集所有硬币(算法正确性还没想清楚)
题目 最小步骤收集硬币 有许多相邻排列的硬币堆。我们需要以最少的步骤收集所有这些硬币,在一个步骤中,我们可以收集一个水平线的硬币或垂直线的硬币,收集的硬币应该是连续的。 输入描述 输入第一行整数N表示硬币堆的数量
91 0
|
7月前
|
数据可视化 流计算
估计获胜概率:模拟分析学生多项选择考试通过概率可视化
估计获胜概率:模拟分析学生多项选择考试通过概率可视化
|
7月前
数据分享|R语言回归模型诊断、离群值分析学生考试成绩、病人医护质量满意度、婴儿死亡率和人均收入、针叶树荫面积数据
数据分享|R语言回归模型诊断、离群值分析学生考试成绩、病人医护质量满意度、婴儿死亡率和人均收入、针叶树荫面积数据
|
7月前
|
数据可视化
结构方程模型 SEM 多元回归和模型诊断分析学生测试成绩数据与可视化
结构方程模型 SEM 多元回归和模型诊断分析学生测试成绩数据与可视化
|
算法
Deepwalk算法复现: 基于 deepwalk的网络节点分类 聚类分析 完整代码+数据
Deepwalk算法复现: 基于 deepwalk的网络节点分类 聚类分析 完整代码+数据
113 0
|
存储 Python
候选基因如何分析?
候选基因如何分析?
|
机器学习/深度学习 算法 测试技术
Sentieon实战:NGS肿瘤变异检测流程
Sentieon实战:NGS肿瘤变异检测流程
202 0
|
编解码
7-58 肿瘤诊断 (30 分)
7-58 肿瘤诊断 (30 分)
109 0
7-58 肿瘤诊断 (30 分)
|
机器学习/深度学习 存储 运维
使用孤立森林进行异常检测
使用孤立森林进行异常检测
336 0
使用孤立森林进行异常检测