news 2026/8/18 19:00:41

PAT 1091 Acute Stroke

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
PAT 1091 Acute Stroke



这一题的大意是说给出一个三维的矩阵,让我们找上下左右前后相互连通,面积大于等于T的数量,统计最终的面积。
看懂题目后实际上还是比较好写的。
我一开始无脑DFS搜索,找连通块
但写好代码后发现最后两个测试点段错误
DFS代码如下:

#include<bits/stdc++.h>#include<iostream>usingnamespacestd;intM;intN;intL;//L是一个大脑中片的数量intT;//M,N是每一个片的大小面积//最大是1286*128//T是临界值,如果一个量连接核心是少于T那么这个核心一定不被数//每一个玻片是由01构成 1代表stroke// 0代表正常// 因为玻片的厚度是不断的,我们仅仅不得不数1的数量去得到量// 然后也许几个分开的核心区域在大脑中,并且仅仅这些量是不少于T// 两个轴呗连接因此属于相同的区域,如果它们分享相同的方面intt[80][1350][130];intans;boolflag[80][1305][135];voiddfs(intx,inty,intz,int&cnt){if(t[x][y][z]==1){cnt++;}flag[x][y][z]=1;if(x+1<L&&y<M&&z<N){if(t[x+1][y][z]==1&&flag[x+1][y][z]==0){dfs(x+1,y,z,cnt);}}if(x<L&&y+1<M&&z<N){if(t[x][y+1][z]==1&&flag[x][y+1][z]==0){dfs(x,y+1,z,cnt);}}if(x<L&&y<M&&z+1<N){if(t[x][y][z+1]==1&&flag[x][y][z+1]==0){dfs(x,y,z+1,cnt);}}if(x-1>=0&&y<M&&z<N){if(t[x-1][y][z]==1&&flag[x-1][y][z]==0){dfs(x-1,y,z,cnt);}}if(x<L&&y-1>=0&&z<N){if(t[x][y-1][z]==1&&flag[x][y-1][z]==0){dfs(x,y-1,z,cnt);}}if(x<L&&y<M&&z-1>=0){if(t[x][y][z-1]==1&&flag[x][y][z-1]==0){dfs(x,y,z-1,cnt);}}}intmain(){cin>>M>>N>>L>>T;for(inti=0;i<L;i++){for(intj=0;j<M;j++){for(intk=0;k<N;k++){intx;cin>>x;t[i][j][k]=x;}}}for(inti=0;i<L;i++){for(intj=0;j<M;j++){for(intk=0;k<N;k++){if(t[i][j][k]==1&&flag[i][j][k]==0){intcnt=0;dfs(i,j,k,cnt);if(cnt>=T){ans+=cnt;}}}}}cout<<ans<<endl;return0;}

原因是数据范围过大,dfs递归栈无法开那么大,于是就段错误
因此这一题应该采用BFS,也就是用一个队列来保存
这样就不会递归爆栈了,思路很简单:
完整代码如下:

#include<bits/stdc++.h>#include<iostream>usingnamespacestd;intM;intN;intL;//L是一个大脑中片的数量intT;//M,N是每一个片的大小面积//最大是1286*128//T是临界值,如果一个量连接核心是少于T那么这个核心一定不被数//每一个玻片是由01构成 1代表stroke// 0代表正常// 因为玻片的厚度是不断的,我们仅仅不得不数1的数量去得到量// 然后也许几个分开的核心区域在大脑中,并且仅仅这些量是不少于T// 两个轴呗连接因此属于相同的区域,如果它们分享相同的方面intt[80][1350][130];intans;boolflag[80][1305][135];voiddfs(intx,inty,intz,int&cnt){if(t[x][y][z]==1){cnt++;}flag[x][y][z]=1;if(x+1<L&&y<M&&z<N){if(t[x+1][y][z]==1&&flag[x+1][y][z]==0){dfs(x+1,y,z,cnt);}}if(x<L&&y+1<M&&z<N){if(t[x][y+1][z]==1&&flag[x][y+1][z]==0){dfs(x,y+1,z,cnt);}}if(x<L&&y<M&&z+1<N){if(t[x][y][z+1]==1&&flag[x][y][z+1]==0){dfs(x,y,z+1,cnt);}}if(x-1>=0&&y<M&&z<N){if(t[x-1][y][z]==1&&flag[x-1][y][z]==0){dfs(x-1,y,z,cnt);}}if(x<L&&y-1>=0&&z<N){if(t[x][y-1][z]==1&&flag[x][y-1][z]==0){dfs(x,y-1,z,cnt);}}if(x<L&&y<M&&z-1>=0){if(t[x][y][z-1]==1&&flag[x][y][z-1]==0){dfs(x,y,z-1,cnt);}}}intmain(){cin>>M>>N>>L>>T;for(inti=0;i<L;i++){for(intj=0;j<M;j++){for(intk=0;k<N;k++){intx;cin>>x;t[i][j][k]=x;}}}for(inti=0;i<L;i++){for(intj=0;j<M;j++){for(intk=0;k<N;k++){if(t[i][j][k]==1&&flag[i][j][k]==0){intcnt=0;dfs(i,j,k,cnt);if(cnt>=T){ans+=cnt;}}}}}cout<<ans<<endl;return0;}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/17 19:58:26

LangFlow创建多语言翻译管道的实际操作

LangFlow创建多语言翻译管道的实际操作 在当今全球化业务不断扩展的背景下&#xff0c;企业对跨语言沟通的需求急剧上升。无论是跨境电商客服、国际内容平台&#xff0c;还是跨国协作系统&#xff0c;如何快速、准确地实现多语言自动翻译&#xff0c;已成为技术架构中不可忽视的…

作者头像 李华
网站建设 2026/8/18 5:55:50

LangFlow资源占用监控:合理分配GPU与内存

LangFlow资源占用监控&#xff1a;合理分配GPU与内存 在大语言模型&#xff08;LLM&#xff09;日益普及的今天&#xff0c;从智能客服到代码生成&#xff0c;AI 应用正快速渗透进各类业务场景。然而&#xff0c;构建稳定、高效的 LLM 工作流并非易事——链式调用复杂、模块依赖…

作者头像 李华
网站建设 2026/8/18 9:26:02

LangFlow构建跨部门协作流程优化器

LangFlow构建跨部门协作流程优化器 在企业数字化转型的浪潮中&#xff0c;一个老生常谈却始终难解的问题浮出水面&#xff1a;为什么两个部门之间协调一件事&#xff0c;常常比开发一个新功能还费劲&#xff1f;信息在CRM里沉睡&#xff0c;在工单系统中流转缓慢&#xff0c;知…

作者头像 李华
网站建设 2026/8/19 2:31:47

期末java 3

文章目录题目要求项目结构1.Action2.ColorableStep1&#xff1a;写接口和父类Step2:写实现类Step3:写测试类题目要求 项目结构 项目结构 1.Action 匿名内部类 运行结果 2.Colorable Step1&#xff1a;写接口和父类 Step2:写实现类 Step3:写测试类 运行结果

作者头像 李华
网站建设 2026/8/18 23:21:24

LangFlow整合OCR技术处理扫描文档案例

LangFlow整合OCR技术处理扫描文档案例 在金融、法律和医疗等行业&#xff0c;每天都有成千上万的纸质合同、病历或发票被扫描存档。这些文档虽然“数字化”了&#xff0c;但内容仍以图像形式存在——无法搜索、难以分析、更谈不上自动处理。传统做法是人工逐字录入&#xff0c;…

作者头像 李华
网站建设 2026/8/18 13:00:17

LangFlow打造销售话术优化建议引擎

LangFlow打造销售话术优化建议引擎 在销售一线&#xff0c;一句话的表达方式可能直接决定成单与否。然而&#xff0c;优秀的话术经验往往依赖少数“金牌销售”的口耳相传&#xff0c;难以规模化复制&#xff1b;而传统培训又缺乏个性化反馈机制&#xff0c;导致新人成长缓慢。如…

作者头像 李华