PAT甲题题解-1091. Acute Stroke (30)-BFS

题意:给定三维数组,0表示正常,1表示有肿瘤块,肿瘤块的区域>=t才算是肿瘤,求所有肿瘤块的体积和

这道题一开始就想到了dfs或者bfs,但当时看数据量挺大的,以为会导致栈溢出,所以并没有立刻写,想有没有别的办法。
然而结果是,实在想不出别的办法了,所以还是尝试写写dfs、bfs。

一开始先用了dfs,最后两个样例段错误,估计是栈溢出了。
之所以dfs栈溢出,因为dfs的时候每个状态都会存储在堆栈里,就好比dfs的第一个状态,一直保存到最后整个dfs结束。
而bfs是存储在队列中,每次队列都会有状态取出来,所以栈存储就会少很多。

对于每次bfs,计算肿瘤块体积,如果>=t,才算入总和sum中。
用vis[i][j][k]标记结点是否被访问过,被访问过的就不会再次访问,即不会再加入到队列中去。

PS:这里slice和vis数组开成了62*1288*130,即每个维度都比原来多2,是为了处理数组越界

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <queue>
using namespace std;
int m,n,l,t;
bool slice[62][1288][130]; //即输入
bool vis[62][1288][130]; //标记对应的点是否访问过
int cnt=0;
struct Node{int i,j,k;
};
int BFS(int a,int b,int c){if(vis[a][b][c] || slice[a][b][c]==false)return 0;Node t;int i,j,k;int res=0;queue<Node>q;t.i=a;t.j=b;t.k=c;q.push(t);vis[a][b][c]=true;while(!q.empty()){t=q.front();q.pop();i=t.i;j=t.j;k=t.k;if(i==0 || i>l || j==0 || j>m || k==0 || k>n)continue;res++;//六个方向if(slice[i][j-1][k] && !vis[i][j-1][k]){t.i=i;t.j=j-1;t.k=k;q.push(t);vis[i][j-1][k]=true;}if(slice[i][j+1][k] && !vis[i][j+1][k]){t.i=i;t.j=j+1;t.k=k;q.push(t);vis[i][j+1][k]=true;}if(slice[i][j][k-1] && !vis[i][j][k-1]){t.i=i;t.j=j;t.k=k-1;q.push(t);vis[i][j][k-1]=true;}if(slice[i][j][k+1] && !vis[i][j][k+1]){t.i=i;t.j=j;t.k=k+1;q.push(t);vis[i][j][k+1]=true;}if(slice[i+1][j][k] && !vis[i+1][j][k]){t.i=i+1;t.j=j;t.k=k;q.push(t);vis[i+1][j][k]=true;}if(slice[i-1][j][k] && !vis[i-1][j][k]){t.i=i-1;t.j=j;t.k=k;q.push(t);vis[i-1][j][k]=true;}}return res;
}
int main()
{memset(vis,false,sizeof(vis));memset(slice,false,sizeof(slice));int a;scanf("%d %d %d %d",&m,&n,&l,&t);for(int i=1;i<=l;i++){for(int j=1;j<=m;j++){for(int k=1;k<=n;k++){scanf("%d",&a);if(a==1)slice[i][j][k]=true;elseslice[i][j][k]=false;}}}int sum=0;for(int i=1;i<=l;i++){for(int j=1;j<=m;j++){for(int k=1;k<=n;k++){cnt=BFS(i,j,k);if(cnt>=t)sum+=cnt;}}}printf("%d\n",sum);return 0;
}
View Code

 

转载于:https://www.cnblogs.com/chenxiwenruo/p/6786453.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/572529.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python如何获取请求的url_听说你在学习:如何通过代码请求URL地址

最近比较忙碌&#xff0c;都没有时间更新公众号文章&#xff0c;表示比较惭愧。最近翻看了一下自己的博客&#xff0c;发现这篇文章的内容还是挺实用&#xff0c;所以&#xff0c;想分享给大家&#xff0c;欢迎阅读。在后续&#xff0c;我会从一个范围的角度进行编写一系列文章…

在sql中将表建在别的构件中用什么语句_SQL实战

学习主题&#xff1a;SQL学习目标&#xff1a;1 掌握子查询1. 什么是子查询(1) 什么是子查询&#xff1f;答&#xff1a;当一个查询是另一个查询的条件时&#xff0c;称之为子查询。简而言之&#xff1a;嵌套查询(2) 子查询执行的顺序是什么&#xff1f;答&#xff1a;先进行内…

数据结构入门之链表(C语言实现)

这篇文章主要是根据《数据结构与算法分析--C语言描述》一书的链表章节内容所写&#xff0c;该书作者给出了链表ADT的一些方法&#xff0c;但是并没有给出所有方法的实现。在学习的过程中将练习的代码记录在文章中&#xff0c;并添加了一些在测试中需要的函数&#xff0c;因此可…

centos radius mysql_centos6.5下安装freeradius2.2.9+mysql

平台centos6.5 x86_641&#xff0c;安装源并更新rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpmyum update -y2&#xff0c;安装相关库yum -y install wget expat-devel gcc make gmp-devel gmp pkgconfig perl libpcap gcc-c logrotate…

二手书城开发步骤

请点击进入 1、二手书城设计 2、搭建页面框架 3、构建bass服务及model 4、淘书页详细 5、购物车页详细 6、订单页详细 7、我的页详细 8、发布页详细转载于:https://www.cnblogs.com/xiaoxiaohabi/p/6789349.html

mongoose mysql_mongoose入门

mongoose入门MongoDB是一个开源的NoSQL数据库&#xff0c;相比MySQL那样的关系型数据库&#xff0c;它更显得轻巧、灵活&#xff0c;非常适合在数据规模很大、事务性不强的场合下使用。同时它也是一个对象数据库&#xff0c;没有表、行等概念&#xff0c;也没有固定的模式和结构…

php 验证码需开启gd2

转载于:https://www.cnblogs.com/zhangj391/p/6794555.html

pcm 降采样_Android_android downsample降低音频采样频率代码,使用Android AudioRecord 录制PCM文 - phpStudy...

android downsample降低音频采样频率代码使用Android AudioRecord 录制PCM文件&#xff0c;android SDK保证在所有设备上都支持的采样频率只有44100HZ&#xff0c;所以如果想得到其他采样频率的PCM数据&#xff0c;有几种方式&#xff1a;1.在设备上尝试可用的采样频率&#xf…

C++中没有定义类的引用。

在有时候由于类太大。须要在类在后面定义&#xff1b; 比如&#xff1a; class Y{void f(X); }; class X{ //一些成员数据和函数};//error由于c要求不论什么一个变量在引用之前必须声明。。在上述定义中我们能够调换两者的顺序来实现。 可是假设形成了循环&#xff1f; class X…

python中不能使用下标运算的有哪些_Python中最常见的10个问题(列表)

列表是Python中使用最多的一种数据结果&#xff0c;如何高效操作列表是提高代码运行效率的关键&#xff0c;这篇文章列出了10个常用的列表操作&#xff0c;希望对你有帮助。注意&#xff1a;很多人学Python过程中会遇到各种烦恼问题&#xff0c;没有人帮答疑。为此小编建了个Py…

Spring:与Redis的集成

一个月没写过博客了&#xff0c;一直想记录一下之前学习的Redis的有关知识&#xff0c;但是因为四月太过于慵懒和忙碌&#xff0c;所以一直没有什么机会&#xff0c;今天就来讲讲&#xff0c;如何使用Spring当中的Spring-data-redis去与Redis这个Nosql数据库集成吧。 首先先简单…

python中如何将字典直接变成二维数组_python基础知识(列表、字典、二维数组)...

记得改参数&#xff01;&#xff01;&#xff01;(1)简述列表(list)结构的特点。List(列表)List的元素以线性方式存储&#xff0c;可以存放重复对象&#xff0c;List主要有以下两个实现类&#xff1a;ArrayList : 长度可变的数组&#xff0c;可以对元素进行随机的访问&#xff…

内置对象和自定义对象的原型链

内置对象的原型链 新增属性 Object.prototype.mytest function() {alert("123");}var o new Object();o.mytest();重写属性 Object.prototype.toString function(){alert("破话之王");}o.toString();转载于:https://www.cnblogs.com/Abner5/p/6798630.h…

mysql将不同行数结果合并成多列_将多行合并到mysql中的一行和多列

我正在MYSQL工作,需要将用户数据提取到一个视图中.我将使用电子邮件客户端中的数据,因此我无法在应用程序层中执行此操作.问题是用户的每个数据字段都包含在单独的行中(这是Wordpress如何设置数据结构).例如,wp_usermeta为每个用户提供了多行数据,如下所示&#xff1a;user_id …

一些JavaScript基本函数

1.document.write(”");为 输出语句 2.JS中的注释为// 3.传统的HTML文档顺序是:document->html->(head,body) 4.一个浏览器窗口中的DOM顺序是:window->(navigator,screen,history,location,document) 5.得到表单中元素的名称和值:document.getElementById(”表单…

mysql动态代理_超全MyBatis动态代理详解(绝对干货)

前言假如有人问你这么几个问题&#xff0c;看能不能答上来Mybatis Mapper 接口没有实现类&#xff0c;怎么实现的动态代理JDK 动态代理为什么不能对类进行代理(充话费送的问题)抽象类可不可以进行 JDK 动态代理(附加问题)答不上来的铁汁&#xff0c;证明 Proxy、Mybatis 源码还…

Linux学习之SAMBA共享(无密码)

一、服务器配置 安装&#xff1a;yum install -y samba 更改要共享的path权限&#xff1a;chmod 777 /mnt/samba/ 先备份smb.conf配置文件&#xff1a;cp /etc/samba/smb.conf /etc/samba/smb.conf.bak 更改配置&#xff1a;vim /etc/samba/smb.conf security sha…

getline()函数

本文转自&#xff1a;http://blog.sina.com.cn/s/blog_60263c1c0101ck25.html学习C的同学可能都会遇到一个getline()函数&#xff0c;譬如在Cpremer中&#xff0c;标准string类型第二小节就是“用getline读取整行文本”。书上给的程序如下&#xff1a;int main(){string line:w…

廖雪峰讲python高阶函数求导公式_高阶函数 - 廖雪峰 Python 2.7 中文教程

高阶函数英文叫Higher-order function。什么是高阶函数&#xff1f;我们以实际代码为例子&#xff0c;一步一步深入概念。变量可以指向函数以Python内置的求绝对值的函数abs()为例&#xff0c;调用该函数用以下代码&#xff1a;>>> abs(-10)10但是&#xff0c;如果只写…

.ai域名注册已经极具投资价值进入火爆期

最近G.ai以六位数的天价被国内域名收藏家收入囊中&#xff0c;间接说明了.ai域名的价值不断攀升&#xff0c;自从2016年AlphaGo胜利以来&#xff0c;人工智能几乎成为人人谈资&#xff0c;而由于.com域名被挖掘待尽&#xff0c;一些聪明的人工智能创业者&#xff0c;避开了com域…