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 作者 陈越 将一系列给定数字顺序插入一个初始为空的二叉搜 ...
随机推荐
- 清轩网络引导页HTML源码
本文有216个文字,大小约为1KB,预计阅读时间1分钟后续可以自己修改,模板还是挺好看的 本网站为清轩编写完成,也就是清轩网络自用的网站官网,界面非常好看, 只不过网站无后台,编辑动态的时候需要手动加 ...
- Jmeter(9)常用定时器
测试计划中元件的执行顺序依次为: 配置元件--逻辑控制器--前置处理器--定时器--取样器--后置处理器--断言--监听器 一.定时器作用域 1.定时器是在每个取样器之前执行的,无论定时器是在取样器之 ...
- php项目从github自动pull到服务器
php项目github自动pull到服务器 项目名:web 一.自动触发 1.在服务器添加脚本文件:gitpull.sh #!/bin/sh cd /www/web git reset --hard ...
- IDEA将Java Web项目打war包
准备工作 1.IntelliJ IDEA开发工具 2.可以正常运行的Java Web项目 打war包流程 1.使用快捷键Ctrl+Alt+Shift+s 或者 鼠标点击选中项目名按F4 打开 Proj ...
- js上 十八、字符串
十八.字符串 #18.1.认识字符串 #什么是字符串 字符串可以是引号中的任意文本.字符串可以由双引号(")或单引号(')表示 ,如 'hello' , "中国" #为什 ...
- VMware虚拟机安装Win7填坑
今天本想赶紧安装Win7虚拟机做个实验,结果鼓捣了一天,写个文章填下坑. 一.Win7镜像文件下载 下载ISO镜像地址:http://msdn.itellyou.cn/ 二.安装tools VMwar ...
- Maven史上最全的pom.xml详解
下面主要是借鉴 官网的资料 收集而来 主要是为了讲解,用到的很少,但是还是需要了解 ,重点是方便查验资料 <project xmlns="http://maven.apache.org ...
- 论文阅读: A Review of Robot Learning for Manipulation: Challenges, Representations, and Algorithms
机器人学习操纵综述:挑战,表示形式和算法 1.介绍 因此,研究人员专注于机器人应如何学习操纵周围世界的问题. 这项研究的范围很广,从学习个人操作技巧到人类演示,再到学习适用于高级计划的操作任务的抽象描 ...
- NET Core 使用EF Core的Code First迁移和DBFirst
DBFirst (1)Microsoft.EntityFrameworkCore (2)Microsoft.EntityFrameworkCore.Design (3)Microsoft.Entity ...
- ADO.NET 帮助类 参数传递 存储过程 分页
SQLHelper public class SqlHelper { private readonly string _constr = ConfigurationManager.Connection ...