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;
}


目录
相关文章
|
9月前
|
开发工具 C++ git
五分钟看懂推送本地项目到 GitHub新手菜鸡
五分钟看懂推送本地项目到 GitHub新手菜鸡
|
安全 网络安全 量子技术
探索未来网络安全的关键:量子加密技术
本文深入探讨了量子加密技术,一项被视为未来网络安全领域的重要突破。通过详细分析量子加密的工作原理、优势以及当前面临的挑战和潜在解决方案,文章为读者提供了对这一前沿技术的全面理解。我们将探讨如何将量子加密技术与现有网络安全架构融合,以及它在未来数字世界中的潜在应用。
901 2
|
传感器 搜索推荐 物联网
5G与物联网:构建万物互联的未来世界
【9月更文挑战第11天】5G与物联网的融合正引领我们进入一个万物互联的未来世界。在这个世界中,各种设备将通过网络紧密相连,实现数据的实时传输和处理。这不仅将极大地方便人们的生活和工作,还将推动社会向智能化、数字化迈进。我们有理由相信,在不久的将来,一个更加智能、便捷、高效的世界将呈现在我们面前。
|
搜索推荐 前端开发 数据可视化
基于Python协同过滤的旅游景点推荐系统,采用Django框架,MySQL数据存储,Bootstrap前端,echarts可视化实现
本文介绍了一个基于Python协同过滤算法的旅游景点推荐系统,该系统采用Django框架、MySQL数据库、Bootstrap前端和echarts数据可视化技术,旨在为用户提供个性化的旅游推荐服务,提升用户体验和旅游市场增长。
1854 9
基于Python协同过滤的旅游景点推荐系统,采用Django框架,MySQL数据存储,Bootstrap前端,echarts可视化实现
|
人工智能 测试技术 BI
Codeforces Round 942 (Div. 2)
Codeforces Round 942 (Div. 2)
|
机器学习/深度学习 人工智能 测试技术
Codeforces Round 960 (Div. 2)
Codeforces Round 960 (Div. 2)
|
算法 搜索推荐 Java
【经典算法】LeetCode 215. 数组中的第K个最大元素(Java/C/Python3实现含注释说明,Medium)
【经典算法】LeetCode 215. 数组中的第K个最大元素(Java/C/Python3实现含注释说明,Medium)
600 3
|
存储 人工智能 C++
【PTA】L1-064 估值一亿的AI核心代码(详C++)
【PTA】L1-064 估值一亿的AI核心代码(详C++)
538 1
|
存储 机器学习/深度学习 人工智能
5个优质免费自然语言处理学习资源 | 语言技术导航
5个优质免费自然语言处理学习资源 | 语言技术导航
|
C++
【PTA】L1-020 帅到没朋友 (C++)
【PTA】L1-020 帅到没朋友 (C++)
294 0
【PTA】L1-020 帅到没朋友 (C++)

热门文章

最新文章