当前位置: 首页 > news >正文

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;}
http://www.cnnetsun.cn/news/177680.html

相关文章:

  • LangFlow结合向量数据库构建RAG系统的完整路径
  • 宁夏银川/西安/郑州/太原商业文旅街区氛围升级设计公司【TOP3】
  • Postman接口测试实战:从基础到高效应用
  • MCP与 Claude Skills让我想起 Unix/Linux 与 Web 的早期
  • LangFlow循环结构设计:避免无限递归陷阱
  • LangFlow处理长上下文的最佳实践
  • LangFlow性能优化建议:让复杂工作流运行更流畅
  • LangFlow与Prometheus集成:实现指标可视化监控
  • LangFlow打造剧本写作协同平台的基础架构
  • LangFlow错误排查手册:常见问题与解决方案汇总
  • 34、服务器认证配置与服务账户管理全解析
  • 44、组策略设置配置全解析
  • LangFlow产品功能建议收集与整理
  • 【专业词汇】基于格式塔原理的“有意识且好玩”设计
  • LangFlow员工培训课程大纲生成器
  • LangFlow动态Prompt生成技术详解
  • LangFlow数学题出题与解题步骤生成
  • 8、优化鼠标交互:打造更出色的数据输入体验
  • 19、使用 XmlValidatingReader 进行 XML 数据验证
  • 21、多线程在 Windows Forms 控件中的应用与实践
  • 24、软件开发技术综合解析
  • 2、Direct3D入门指南
  • LangFlow谜语与脑筋急转弯生成器
  • 前端踩坑实录:a标签下划线那些你不知道的细节与修复技巧
  • LangFlow如何导出为可执行代码?用于生产环境部署
  • LangFlow网页内容抓取+摘要生成一体化流程
  • LangFlow中的条件分支与循环结构如何设置?
  • 19、深入了解Windows 8安全设置:访问配置与认证授权
  • 23、Windows 8 远程访问与移动性配置全解析
  • LangFlow插件生态逐步完善,支持第三方扩展