news 2026/2/25 7:00:07

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/2/23 0:12:32

LangFlow调度定时任务:自动化AI处理流程

LangFlow调度定时任务&#xff1a;自动化AI处理流程 在当今快速迭代的AI应用开发中&#xff0c;一个常见的挑战浮现出来&#xff1a;如何让复杂的语言模型工作流既易于构建&#xff0c;又能稳定、自动地运行在生产环境中&#xff1f;许多团队借助LangChain实现了强大的LLM集成能…

作者头像 李华
网站建设 2026/2/24 14:20:37

LangFlow实现简历筛选自动化的可行性分析

LangFlow实现简历筛选自动化的可行性分析 在企业招聘高峰期&#xff0c;HR团队常常面临数百份简历的初筛压力。传统的处理方式依赖人工逐份阅读、提取关键信息并判断匹配度&#xff0c;不仅耗时耗力&#xff0c;还容易因主观偏好导致评估偏差。随着大语言模型&#xff08;LLM&a…

作者头像 李华
网站建设 2026/2/12 1:24:55

ESPectre:不用摄像头,也能在ESP32实现高精度人体移动检测的 Wi-Fi 方案

ESPectre:不用摄像头,也能在ESP32实现高精度人体移动检测的 Wi-Fi 方案 关键词:ESPectre、Wi-Fi CSI、ESP32、ESPHome、Home Assistant、无摄像头运动检测 最近在逛 GitHub 的时候,发现了一个非常有意思的智能家居项目 —— ESPectre。 它不靠摄像头、不用麦克风,只利用 W…

作者头像 李华
网站建设 2026/2/20 14:26:02

LangFlow构建个性化推荐引擎的尝试

LangFlow构建个性化推荐引擎的尝试 在电商、内容平台和智能服务日益依赖“千人千面”体验的今天&#xff0c;如何快速构建一个能理解用户意图、融合多源数据并生成自然语言推荐结果的系统&#xff0c;成了许多团队面临的现实挑战。传统推荐系统多基于协同过滤或深度学习模型&am…

作者头像 李华
网站建设 2026/2/25 2:36:36

LangFlow内置调试器使用技巧:精准定位流程卡点

LangFlow内置调试器使用技巧&#xff1a;精准定位流程卡点 在构建大语言模型&#xff08;LLM&#xff09;驱动的应用时&#xff0c;你是否曾遇到这样的场景&#xff1a;流程看似完整&#xff0c;点击“运行”后却迟迟得不到预期结果&#xff1f;或者输出突然中断&#xff0c;日…

作者头像 李华
网站建设 2026/2/14 18:59:09

LangFlow开源镜像上线,支持一键部署与扩展

LangFlow开源镜像上线&#xff0c;支持一键部署与扩展 在大语言模型&#xff08;LLM&#xff09;技术飞速演进的今天&#xff0c;越来越多的企业和个人开发者试图将AI能力快速集成到实际应用中。LangChain作为连接语言模型与外部系统的桥梁&#xff0c;极大提升了构建智能体、…

作者头像 李华