L3-004. 肿瘤诊断

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

输入格式:

输入第一行给出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个红色的像素都与蓝色的像素连通。

输出格式:

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

输入样例:

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

分析:三维的广度优先搜索~~XYZ三个数组判断方向,对每一个点广度优先累计肿瘤块的大小,如果大于等于t就把结果累加。用visit数组标记当前的点有没有被访问过,被访问过的结点是不会再访问的。。judge判断是否超过了边界,或者是否当前结点为0不是肿瘤~~~

#include <cstdio>
#include <queue>
using namespace std;
struct node {int x, y, z;
};
int m, n, l, t;
int X[6] = {1, 0, 0, -1, 0, 0};
int Y[6] = {0, 1, 0, 0, -1, 0};
int Z[6] = {0, 0, 1, 0, 0, -1};
int arr[1300][130][80];
bool visit[1300][130][80];
bool judge(int x, int y, int z) {if(x < 0 || x >= m || y < 0 || y >= n || z < 0 || z >= l) return false;if(arr[x][y][z] == 0 || visit[x][y][z] == true) return false;return true;
}
int bfs(int x, int y, int z) {int cnt = 0;node temp;temp.x = x, temp.y = y, temp.z = z;queue<node> q;q.push(temp);visit[x][y][z] = true;while(!q.empty()) {node top = q.front();q.pop();cnt++;for(int i = 0; i < 6; i++) {int tx = top.x + X[i];int ty = top.y + Y[i];int tz = top.z + Z[i];if(judge(tx, ty, tz)) {visit[tx][ty][tz] = true;temp.x = tx, temp.y = ty, temp.z = tz;q.push(temp);}}}if(cnt >= t)return cnt;elsereturn 0;}
int main() {scanf("%d %d %d %d", &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++)scanf("%d", &arr[j][k][i]);int ans = 0;for(int i = 0; i < l; i++) {for(int j = 0; j < m; j++) {for(int k = 0; k < n; k++) {if(arr[j][k][i] == 1 && visit[j][k][i] == false)ans += bfs(j, k, i);}}}printf("%d", ans);return 0;
}

L3-004. 肿瘤诊断-PAT团体程序设计天梯赛GPLT(广度优先搜索)相关推荐

  1. L2-005 集合相似度-PAT团体程序设计天梯赛GPLT

    题目来源:团体程序设计天梯赛-练习集 题目地址:L2-005 集合相似度 题目大意 给定 nnn 个集合,然后有 kkk 次询问,每次询问都要求出 Nc/Nt×100%N_c / N_t \times ...

  2. L1-079 天梯赛的善良 (20 分)-PAT 团体程序设计天梯赛 GPLT

    天梯赛是个善良的比赛.善良的命题组希望将题目难度控制在一个范围内,使得每个参赛的学生都有能做出来的题目,并且最厉害的学生也要非常努力才有可能得到高分. 于是命题组首先将编程能力划分成了 106个等级( ...

  3. L1-078 吉老师的回归 (15 分)-PAT 团体程序设计天梯赛 GPLT

    曾经在天梯赛大杀四方的吉老师决定回归天梯赛赛场啦! 为了简化题目,我们不妨假设天梯赛的每道题目可以用一个不超过 500 的.只包括可打印符号的字符串描述出来,如:Problem A: Print &q ...

  4. [Python] L1-052 2018我们要赢-PAT团体程序设计天梯赛GPLT

    2018年天梯赛的注册邀请码是"2018wmyy",意思就是"2018我们要赢".本题就请你用汉语拼音输出这句话. 输入格式: 本题没有输入. 输出格式: 在第 ...

  5. L1-052 2018我们要赢-PAT团体程序设计天梯赛GPLT

    2018年天梯赛的注册邀请码是"2018wmyy",意思就是"2018我们要赢".本题就请你用汉语拼音输出这句话. 输入格式: 本题没有输入. 输出格式: 在第 ...

  6. L3-007. 天梯地图-PAT团体程序设计天梯赛GPLT

    本题要求你实现一个天梯赛专属在线地图,队员输入自己学校所在地和赛场地点后,该地图应该推荐两条路线:一条是最快到达路线:一条是最短距离的路线.题目保证对任意的查询请求,地图上都至少存在一条可达路线. 输 ...

  7. L3-011 直捣黄龙 (30 分)-PAT 团体程序设计天梯赛 GPLT

    本题是一部战争大片 -- 你需要从己方大本营出发,一路攻城略地杀到敌方大本营.首先时间就是生命,所以你必须选择合适的路径,以最快的速度占领敌方大本营.当这样的路径不唯一时,要求选择可以沿途解放最多城镇 ...

  8. [Python] L1-045 宇宙无敌大招呼-PAT团体程序设计天梯赛GPLT

    据说所有程序员学习的第一个程序都是在屏幕上输出一句"Hello World",跟这个世界打个招呼.作为天梯赛中的程序员,你写的程序得高级一点,要能跟任意指定的星球打招呼. 输入格式 ...

  9. [Python] L1-005. 考试座位号-PAT团体程序设计天梯赛GPLT

    L1-005. 考试座位号 每个PAT考生在参加考试时都会被分配两个座位号,一个是试机座位,一个是考试座位.正常情况下,考生在入场时先得到试机座位号码,入座进入试机状态后,系统会显示该考生的考试座位号 ...

最新文章

  1. SQLite Insert 语句(http://www.w3cschool.cc/sqlite/sqlite-insert.html)
  2. 加个属性让div成纵向横向无缝滚动(支持IE和FF)
  3. 八皇后问题 递归求解法
  4. 用户生命周期常用指标_生命周期管理工具如何使用指标
  5. 华为云PB级数据库GaussDB(for Redis)揭秘第九期:与HBase的对比
  6. Python可视化 | Seaborn(01)
  7. 云服务器在哪里创建网站目录,如何在云服务器创建根目录
  8. linux oracle查看服务,技术|如何查看 Linux 中所有正在运行的服务
  9. hash通信(python多线程应用)采用md5加密
  10. 以下文件中的行尾不一致,要将行尾标准化吗?+乱码
  11. 小D课堂 - 新版本微服务springcloud+Docker教程_6-04 自定义Zuul过滤器实现登录
  12. 这本Python入门畅销书《“笨办法”学python 3》,不仅仅是一本书
  13. CPDA|数据分析师需要具备哪些基本功?
  14. java前后端分离解决session,解决前后端分离开发sessionId不一致问题
  15. (20191227已解决)从Linux服务器下载超过4G的文件并批量操作同类型文件
  16. Bootstrap Validate 下拉框验证
  17. steam饥荒服务器为什么显示未响应,《饥荒:联机版》服务器卡顿原因分析及解决教程...
  18. mysql错误码2002_MySQL错误ERROR 2002 (HY000): Can't connect to local MySQL server through socket
  19. 神州信息与北京市地方金融监督管理局、房山区人民政府签署战略合作
  20. 京准通-全店海投出价方式介绍

热门文章

  1. Android: android 如何预置APK
  2. JavaScript中引号的多重嵌套
  3. 最完整的android源码获取方法及环境建立
  4. Android笔记之权限库AndPermission
  5. 一个iOS开发者的Flutter“历险记”
  6. check_http检查http服务
  7. 思科警告:这个 IOS XR 0day 已遭利用,目前尚无补丁
  8. 理解vue中的组件(二)
  9. 面向对象的三个特点:封装、继承、多态
  10. DevExpress控件学习总结(转)