PAT天梯赛练习 L3-004 肿瘤诊断 (30分) 三维BFS
题目分析:
可能是我的理解能力比较差,在读题的时候一直以为所有的切片是可以排列组合的,并不是按照输入顺序就定死的,那么这题就变得十分的复杂啦~~~~~,查看的题解之后发现所有的切片并没有所谓的自由组合的情况,而是类似与一片一片从下往上叠加在一起,形成一个三维的空间,那我们需要做的就是将所有的像素以三维数组的形式存储,然后bfs所有像素为1的点,只要相连的6个方向中有1则继续bfs,每次搜索过的1像素点都清零,避免重复搜索,在bfs的过程中统计相连的1的个数,每次bfs结束时比较sum和阈值的大小,并加入总体积
代码:
1 #include<iostream>
2 #include<algorithm>
3 #include<stdio.h>
4 #include<cmath>
5 #include<set>
6 #include<queue>
7 #include<vector>
8 using namespace std;
9
10 int dir[6][3] = {{1, 0, 0}, {-1, 0, 0}, {0, 1, 0}, {0, -1, 0}, {0, 0, 1}, {0, 0, -1}}; //x轴 y轴 z轴
11 int a[65][130][1300];
12 int n, m, l, t;
13 int area = 0;
14 struct Node{
15 int x, y, z;
16 };
17
18 bool judge(int x, int y, int z){
19 if(x < 0 || x > l || y < 0 || y > n || z < 0 || z > m) return false;
20 else return true;
21 }
22
23 void bfs(int x, int y, int z){
24 queue<Node> q;
25 int sum = 1;
26 Node temp;
27 temp.x = x; temp.y = y; temp.z = z;
28 a[x][y][z] = 0; //搜索过的像素清零
29 q.push(temp);
30 while(!q.empty()){
31 temp = q.front();
32 q.pop();
33 for(int i = 0; i < 6; i++){
34 Node now;
35 now.x = temp.x + dir[i][0];
36 now.y = temp.y + dir[i][1];
37 now.z = temp.z + dir[i][2];
38 if(judge(now.x, now.y, now.z) && a[now.x][now.y][now.z]){
39 a[now.x][now.y][now.z] = 0;
40 sum++;
41 q.push(now);
42 }
43 }
44 }
45 if(sum >= t) area += sum;
46 }
47
48 int main(){
49 scanf("%d%d%d%d", &n, &m, &l, &t);
50 for(int i = 1; i <= l; i++){
51 for(int j = 1; j <= n; j++){
52 for(int k = 1; k <= m; k++){
53 scanf("%d", &a[i][j][k]);
54 }
55 }
56 }
57 for(int i = 1; i <= l; i++){
58 for(int j = 1; j <= n; j++){
59 for(int k = 1; k <= m; k++){
60 if(a[i][j][k]) bfs(i, j, k);
61 }
62 }
63 }
64 printf("%d\n", area);
65 return 0;
66 }
回顾:
1 #include<iostream>
2 #include<stdio.h>
3 #include<queue>
4 #include<string.h>
5 #include<algorithm>
6 using namespace std;
7
8 int mat[65][1300][130];
9 int dir[6][3] = {{1, 0, 0}, {-1, 0, 0}, {0, 0, 1}, {0, 0, -1}, {0, 1, 0}, {0, -1, 0}};
10 int m, n, l, t;
11 int num;
12 struct Node{
13 int x, y, z;
14 };
15
16 void bfs(int x, int y, int z){
17 queue<Node> q;
18 Node temp;
19 temp.x = x; temp.y = y; temp.z = z;
20 mat[x][y][z] = 0;
21 q.push(temp);
22 int sum = 1;
23 while(!q.empty()){
24 temp = q.front();
25 q.pop();
26 for(int i = 0; i < 6; i++){
27 int fx = dir[i][0] + temp.x;
28 int fy = dir[i][1] + temp.y;
29 int fz = dir[i][2] + temp.z;
30 if(fx >= 1 && fx <= l && fy >= 1 && fy <= m && fz >= 1 && fz <= n){
31 if(mat[fx][fy][fz] == 1){
32 mat[fx][fy][fz] = 0;
33 sum++;
34 Node next;
35 next.x = fx; next.y = fy; next.z = fz;
36 q.push(next);
37 }
38 }
39 }
40 }
41 if(sum >= t) num += sum;
42 }
43
44 int main(){
45 scanf("%d%d%d%d", &m, &n, &l, &t);
46 for(int i = 1; i <= l; i++){
47 for(int j = 1; j <= m; j++){
48 for(int k = 1; k <= n; k++){
49 scanf("%d", &mat[i][j][k]);
50 }
51 }
52 }
53 for(int i = 1; i <= l; i++){
54 for(int j = 1; j <= m; j++){
55 for(int k = 1; k <= n; k++){
56 if(mat[i][j][k] == 1){
57 bfs(i, j, k);
58 }
59 }
60 }
61 }
62 printf("%d\n", num);
63 return 0;
64 }
PAT天梯赛练习 L3-004 肿瘤诊断 (30分) 三维BFS的更多相关文章
- PAT 天梯赛 是否完全二叉搜索树 (30分)(二叉搜索树 数组)
将一系列给定数字顺序插入一个初始为空的二叉搜索树(定义为左子树键值大,右子树键值小),你需要判断最后的树是否一棵完全二叉树,并且给出其层序遍历的结果. 输入格式: 输入第一行给出一个不超过20的正整数 ...
- PAT天梯赛练习 L3-003 社交集群 (30分) DFS搜索
题目分析: 一共有N个编号为1~1000的人,以及一共有编号为1~1000种不同的兴趣,在题目给出1~N编号的人员每个人喜欢的兴趣的id后,要求统计出不同的人员集合的个数以及每个人员几个的人数从大到小 ...
- PAT甲级:1064 Complete Binary Search Tree (30分)
PAT甲级:1064 Complete Binary Search Tree (30分) 题干 A Binary Search Tree (BST) is recursively defined as ...
- PAT天梯赛练习题——L3-004. 肿瘤诊断(三维连通块并查集)
L3-004. 肿瘤诊断 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 在诊断肿瘤疾病时,计算肿瘤体积是很重要的一环.给定病灶 ...
- PAT天梯赛 L1-049 天梯赛座位分配
题目链接:点击打开链接 天梯赛每年有大量参赛队员,要保证同一所学校的所有队员都不能相邻,分配座位就成为一件比较麻烦的事情.为此我们制定如下策略:假设某赛场有 N 所学校参赛,第 i 所学校有 M[i] ...
- PAT天梯赛L3-007 天梯地图
题目链接:点击打开链接 本题要求你实现一个天梯赛专属在线地图,队员输入自己学校所在地和赛场地点后,该地图应该推荐两条路线:一条是最快到达路线:一条是最短距离的路线.题目保证对任意的查询请求,地图上都至 ...
- PAT天梯赛练习题——L3-007. 天梯地图(多边权SPFA)
L3-007. 天梯地图 时间限制 300 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 本题要求你实现一个天梯赛专属在线地图,队员输入自己学校 ...
- PAT天梯赛L3-004 肿瘤诊断
题目链接:点击打开链接 在诊断肿瘤疾病时,计算肿瘤体积是很重要的一环.给定病灶扫描切片中标注出的疑似肿瘤区域,请你计算肿瘤的体积. 输入格式: 输入第一行给出4个正整数:M.N.L.T,其中M和N是每 ...
- PAT天梯赛练习题 L3-010. 是否完全二叉搜索树(完全二叉树的判断)
L3-010. 是否完全二叉搜索树 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 将一系列给定数字顺序插入一个初始为空的二叉搜 ...
随机推荐
- 学习笔记:Link Cut Tree
模板题 原理 类似树链剖分对重儿子/长儿子剖分,Link Cut Tree 也做的是类似的链剖分. 每个节点选出 \(0 / 1\) 个儿子作为实儿子,剩下是虚儿子.对应的边是实边/虚边,虚实时可以进 ...
- AcWing 392. 会合
一个思路不难,但是实现起来有点毒瘤的题. 显然题目给出的是基环树(内向树)森林. 把每一个基环抠出来. 大力分类讨论: 若 \(a, b\) 不在一个联通量里,显然是 \(-1, -1\) 若 \(a ...
- Centos7下使用mail发送邮件
首先检测相关服务是否已安装[root@ProxyServer ~]# rpm -qa|grep mail libreport-plugin-mailx-2.0.9-19.el6.x86_64 mail ...
- 写了两年的一本.NET书现在终于在北京最大的新华书店上架了,然而我却很难找到工作了。
两年前,有几个出版社的编辑在QQ上跟我联系写书的事情,好奇为什么出版社会找到我这样一个很普通的.NET技术人员,其中一个编辑说他们分析了很多博客园博主的文章阅读量和写作质量,觉得我的博客还是不错的.尽 ...
- 看图知Docker
0.https://www.docker.com/ 1.Why Docker 可参考: https://www.cnblogs.com/kex1n/p/6933039.html https://www ...
- 通过Spring profile方式实现多环境部署
1 多环境部署 在实际软件开发和部署过程中,我们的软件往往需要在不同的运行环境中运行.例如,各个环境数据库地址不同,需要单独配置.spring高级装备中提供profile,来支持多环境部署. 1.1 ...
- Angular:惰性加载的模块
①通过ng new angular-module创建一个全新的angular应用,默认不选路由 ②通过一下命令分别创建2个模块和1个组件 ng g m hx1 ng g c hx1 ng g m hx ...
- apache重写URL时,排除静态资源
THINKPHP项目部署的apache 上面时,如果为了隐藏入口文件配置了重写URL,会导致将静态资源的URL也解析成Controller/Method,导致触发模块不存在 所以在URL重写配置中,需 ...
- Spring Cloud 入门教程(一): Eureka 服务注册
创建一个Maven工程,New-Other-Maven-Maven Probject 点击Next,红色框里的选上 点击Next 点击Finsh就完成了一个Maven Probject的创建. (1) ...
- ⑦SpringCloud 实战:引入Sleuth组件,完善服务链路跟踪
这是SpringCloud实战系列中第7篇文章,了解前面第两篇文章更有助于更好理解本文内容: ①SpringCloud 实战:引入Eureka组件,完善服务治理 ②SpringCloud 实战:引入F ...