PAT 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
题意
如上
题解
三维广搜,6个方向
代码
#include<stdio.h>
#include<queue>
#include<algorithm>
using namespace std; int a[][][];
int area=;
int dx[][]={{,,},{-,,},{,,},{,-,},{,,},{,,-}};//6个方向
int n,m,l,t; struct p{
int x,y,z;
}k,o; int check(int x,int y,int z){//x,y,z是否合法
if(x<||y<||z<)return ;
if(x>=l||y>=n||z>=m)return ;
return ;
} void bfs(int x,int y,int z){
queue<p> qu;
int sum=; k.x=x;k.y=y;k.z=z;
a[k.x][k.y][k.z]=;//开始的点别忘了归0
qu.push(k); while(!qu.empty()){
k=qu.front();
qu.pop();
for(int i=;i<;i++){
o.x=k.x+dx[i][];
o.y=k.y+dx[i][];
o.z=k.z+dx[i][];
if(check(o.x,o.y,o.z)&&a[o.x][o.y][o.z]){
a[o.x][o.y][o.z]=;//访问过了就归0
sum++;
qu.push(o);
}
}
}
if(sum>=t)
area+=sum;
}
int main(){
scanf("%d%d%d%d",&n,&m,&l,&t);
for(int k=;k<l;k++){
for(int i=;i<n;i++){
for(int j=;j<m;j++)
scanf("%d",&a[k][i][j]);
}
} for(int k=;k<l;k++){
for(int i=;i<n;i++){
for(int j=;j<m;j++)
if(a[k][i][j])
bfs(k,i,j);
}
}
printf("%d\n",area);
return ;
}
PAT L3-004 肿瘤诊断(三维广搜)的更多相关文章
- UVa 1600 Patrol Robot(三维广搜)
A robot has to patrol around a rectangular area which is in a form of m x n grid (m rows and ncolumn ...
- hdu 1240(三维广搜)
题意: 有一个n*n*n的三维空间. 给你起始坐标和终点坐标.要你从起点到终点,问最少需要多少步走出去.如果走不出去则输出"NO ROUTE". 空间中 'O' 表示这个点可以走, ...
- HDU 1253 (简单三维广搜) 胜利大逃亡
奇葩!这么简单的广搜居然爆内存了,而且一直爆,一直爆,Orz 而且我也优化过了的啊,尼玛还是一直爆! 先把代码贴上睡觉去了,明天再来弄 //#define LOCAL #include <ios ...
- HDU 1240 (简单三维广搜) Asteroids!
给出一个三维的迷宫以及起点和终点,求能否到大终点,若果能输出最短步数 三维的问题无非就是变成了6个搜索方向 最后强调一下xyz的顺序,从输入数据来看,读入的顺序是map[z][x][y] 总之,这是很 ...
- zoj1940(三维广搜)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=940 分析:三维其实就是六个方向地搜索,思维清晰且细心点,很快就AC了 ...
- PAT天梯赛练习题——L3-004. 肿瘤诊断(三维连通块并查集)
L3-004. 肿瘤诊断 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 在诊断肿瘤疾病时,计算肿瘤体积是很重要的一环.给定病灶 ...
- PAT天梯赛L3-004 肿瘤诊断
题目链接:点击打开链接 在诊断肿瘤疾病时,计算肿瘤体积是很重要的一环.给定病灶扫描切片中标注出的疑似肿瘤区域,请你计算肿瘤的体积. 输入格式: 输入第一行给出4个正整数:M.N.L.T,其中M和N是每 ...
- hdu 1253 胜利大逃亡(广搜,队列,三维,简单)
题目 原来光搜是用队列的,深搜才用栈,我好白痴啊,居然搞错了 三维的基础的广搜题 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #in ...
- POJ 2251 Dungeon Master(广搜,三维,简单)
题目 简单的3d广搜,做法类似与 hdu 的 胜利大逃亡 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<str ...
随机推荐
- Dell PowerEdge R630服务器VMware ESXI6.0服务器安装
一.Raid 磁阵划分 官方说明:http://www.dell.com/support/article/cn/zh/cndhs1/SLN292050/%E6%88%B4%E5%B0%94%E6%9C ...
- 详解UE4静态库与动态库的导入与使用
转自:http://blog.csdn.net/u012999985/article/details/71554628 一.基本内容概述 最近做项目时经常看到build.cs文件,就想研究一下UE ...
- 一份CTR的特征工程图
- keras的Embedding层
keras.layers.embeddings.Embedding(input_dim, output_dim, embeddings_initializer='uniform', embedding ...
- MapReduce C++ Library
MapReduce C++ Library for single-machine, multicore applications Distributed and scalable computing ...
- 在docker中运行kong和kong dashboard
一.制作alpine版的kong镜像 https://github.com/Kong/docker-kong/tree/d4cec3dc46c780a916a40963309554ca81da2b46 ...
- serializers 序列化器里面进行 校验等
一.第一版(一般不用) # 声明序列化器from rest_framework import serializersfrom djangoDome.models import Book class P ...
- InterlliJ IDEA 2017.3.x / 2017.3.4 License Server激活
InterlliJ IDEA 2017.3.x / 2017.3.4 License Server激活 1.Lincense Server激活 // 激活IDEA的License Server 地址 ...
- Windows下OpenCV 3.1.0 在 Qt Creator 4.0.2 (Qt 5.7.0 MinGW) 中的开发环境配置
2017-2-23 Update: 修改并添加了部分细节 最近正在学习OpenCV ,为毕业设计做准备.Windows版本的OpenCV都默认提供对VS的支持,其在VS中的配置比较简单,网上也有大批教 ...
- Flutter,最好的跨平台开发框架
今天说说使用flutter的一些体会 对于Flutter,从发现到接触再到使用,不知不觉,已经有大半年了!在这段时间里,谷歌几乎每天都会更新Flutter,有时甚至一天更新几次,这让我对它更加充满信心 ...