news 2026/6/23 18:20:45

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/6/23 17:36:45

LangFlow结合向量数据库构建RAG系统的完整路径

LangFlow结合向量数据库构建RAG系统的完整路径 在企业知识管理日益复杂的今天&#xff0c;如何让大语言模型&#xff08;LLM&#xff09;真正“懂”你的业务文档&#xff0c;而不是依赖通用语料泛泛而谈&#xff1f;这是当前AI落地中最现实的挑战之一。传统的问答系统受限于关…

作者头像 李华
网站建设 2026/6/23 17:40:57

宁夏银川/西安/郑州/太原商业文旅街区氛围升级设计公司【TOP3】

在银川西夏文化街区&#xff0c;夯土墙与智能导览系统形成时空对话&#xff1b;西安大唐不夜城的诗词灯阵重构了盛唐气象的感知方式&#xff1b;郑州德化街用商都IP打造了青年文化聚落&#xff1b;太原钟楼街的晋商主题光影秀让历史人物在数字穹顶下重现。肆墨设计顾问有限公司…

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

Postman接口测试实战:从基础到高效应用

在当今快速迭代的软件开发环境中&#xff0c;接口测试作为确保系统可靠性和数据一致性的关键环节&#xff0c;日益受到测试从业者的重视。Postman作为一款广泛使用的API测试工具&#xff0c;以其直观的界面和强大的功能&#xff0c;成为测试工程师的得力助手。本文将从实战角度…

作者头像 李华
网站建设 2026/6/23 6:37:24

MCP与 Claude Skills让我想起 Unix/Linux 与 Web 的早期

一、全文翻译&#xff08;中文&#xff09; 围绕“开源 AI”的争论&#xff0c;大多聚焦在开放权重模型上。但这有点像在 PC 时代争论&#xff1a;最重要的目标应该是让英特尔把芯片设计开源。那对某些人可能有用&#xff0c;但它并不会创造出 Linux、Apache&#xff0c;或支撑…

作者头像 李华
网站建设 2026/6/22 22:52:58

LangFlow循环结构设计:避免无限递归陷阱

LangFlow循环结构设计&#xff1a;避免无限递归陷阱 在构建智能对话系统或自动化推理流程时&#xff0c;你是否曾遇到过这样的情况——工作流突然卡死、响应迟迟不返回&#xff0c;甚至服务器内存飙升&#xff1f;深入排查后发现&#xff0c;问题根源竟是一条看似合理的“反馈…

作者头像 李华
网站建设 2026/6/23 4:08:18

LangFlow处理长上下文的最佳实践

LangFlow处理长上下文的最佳实践 在构建AI驱动的应用时&#xff0c;一个常见的痛点是&#xff1a;如何让大语言模型&#xff08;LLM&#xff09;准确理解并回应那些动辄数千甚至上万token的长文档&#xff1f;比如一份百页合同、一篇科研论文或企业内部的知识库。直接把整篇内容…

作者头像 李华