当前位置: 首页 > 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.jsqmd.com/news/121991/

相关文章:

  • LangFlow调度定时任务:自动化AI处理流程
  • JMeter性能测试全流程配置详解
  • 移动端自动化测试的核心利器:Appium技术解析与实践指南
  • LangFlow集成HuggingFace模型:释放开源大模型全部潜力
  • Agent Skills 这项技术如何“教会”AI 助手做专业化工作
  • LangFlow创建多语言翻译管道的实际操作
  • 期末复习01-02(结构类)
  • LangFlow实现多轮对话管理的架构设计
  • 宁夏银川/西安/郑州/太原商业文旅街区氛围升级设计公司【TOP3】
  • LangFlow后端扩展开发教程:添加私有模型支持
  • LangFlow导入导出功能使用说明:跨平台迁移无忧
  • Agent Skills 扩展了 Claude 用户创建、部署、分享与发现新的“智能体技能”的能力
  • 基于Java+SSM+Flask校内互助交易平台(源码+LW+调试文档+讲解等)/校园互助/校内交易/学生互助平台/校园二手交易/校内交易平台/学生交易平台/校园资源共享/校内资源共享/学生买卖平台
  • MCP与 Claude Skills让我想起 Unix/Linux 与 Web 的早期
  • LangFlow开发股票行情解读机器人的实践
  • 大学生必备8个免费AI写论文工具:效率飙升200%,告别拖延! - 麟书学长
  • LangFlow构建个性化推荐引擎的尝试
  • LangFlow批量处理数据集的高效方式
  • LangFlow创建会议纪要自动生成工具的步骤
  • LangFlow构建跨部门协作流程优化器
  • 2025年广东惠州高光喷涂服务商选型深度剖析与行业指南 - 2025年品牌推荐榜
  • LangFlow用于学术论文理解与归纳的应用
  • LangFlow构建竞品分析自动化报告系统
  • LangFlow性能优化建议:让复杂工作流运行更流畅
  • 计算机系统笔记
  • LangFlow构建语音识别与合成一体化系统
  • LangFlow与其他可视化工具(如Flowise)的对比评测
  • 2025年12月江苏徐州给煤机品牌排行前十解析 - 2025年品牌推荐榜
  • LangFlow与传统编程对比:哪种更适合LLM工作流开发?
  • Go 1.22 通关讲解