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

PAT 甲级 1091 Acute Stroke

一开始只是简单的递归(bfs),导致最后两个没法通过(爆栈了)

//最后两个案例没有通过,只是最简单的bfs暴力算法
#include<cstdio>
using namespace std;
int v[62][1288][130]={0};
int find(int i,int j,int k){
    int sum=1;
    v[i][j][k]=2;
    if(v[i][j][k+1]==1) sum+=find(i,j,k+1);
    if(v[i][j][k-1]==1) sum+=find(i,j,k-1);
    if(v[i][j+1][k]==1) sum+=find(i,j+1,k);
    if(v[i][j-1][k]==1) sum+=find(i,j-1,k);
    if(v[i+1][j][k]==1) sum+=find(i+1,j,k);
    if(v[i-1][j][k]==1) sum+=find(i-1,j,k);
    return sum;
}
int main(){
    int m,n,l,t,ans=0,f;
    scanf("%d %d %d %d",&m,&n,&l,&t);
    // vector<vector<int>>v[l];
    for(int i=1;i<=l;i++){
        for(int j=1;j<=m;j++){
            for(int k=1;k<=n;k++){
                scanf("%d",&v[i][j][k]);
            }
        }
    }
    for(int i=1;i<=l;i++){
        for(int j=1;j<=m;j++){
            for(int k=1;k<=n;k++){
                if(v[i][j][k]==1){
                    f=find(i,j,k);
                    ans+=f>=t? f:0;
                }
            }
        }
    }
    printf("%d",ans);
    return 0;
}

后面看了书上的使用queue存储走过的路径,就不用使用递归了。

//求有问题的总体积
//AC
#include<cstdio>
#include<queue>
using namespace std;
int v[62][1288][130]={0};
struct node{
    int i,j,k;
};
queue <node> q;
int bfs(){
    int num=0;
    while(!q.empty()){
        node a=q.front();
        q.pop();
        int i=a.i,j=a.j,k=a.k;
        if(v[i][j][k]==2) continue;
        num++;
        v[i][j][k]=2;
        if(v[i][j][k+1]==1) q.push({i,j,k+1});
        if(v[i][j][k-1]==1) q.push({i,j,k-1});
        if(v[i][j+1][k]==1) q.push({i,j+1,k});
        if(v[i][j-1][k]==1) q.push({i,j-1,k});
        if(v[i+1][j][k]==1) q.push({i+1,j,k});
        if(v[i-1][j][k]==1) q.push({i-1,j,k});
    }
    return num;
}
int main(){
    int m,n,l,t,ans=0,f;
    scanf("%d %d %d %d",&m,&n,&l,&t);
    for(int i=1;i<=l;i++){
        for(int j=1;j<=m;j++){
            for(int k=1;k<=n;k++){
                scanf("%d",&v[i][j][k]);
            }
        }
    }
    for(int i=1;i<=l;i++){
        for(int j=1;j<=m;j++){
            for(int k=1;k<=n;k++){
                if(v[i][j][k]==1){
                    q.push({i,j,k});
                    f=bfs();
                    ans+=f>=t? f:0;
                }
            }
        }
    }
    printf("%d",ans);
    return 0;
}


http://www.kler.cn/a/559025.html

相关文章:

  • 深度学习(5)-卷积神经网络
  • LangChain-基础(prompts、序列化、流式输出、自定义输出)
  • conda环境中运行“python --version“所得的版本与环境中的python版本不一致----deepseek并非全能
  • 怎么在Github上readme文件里面怎么插入图片?
  • rtconfig.cpython-313.pyc 在 .gitignore文件中写入 *.pyc 文件仍然没有被忽略?
  • Grok 3与GPT-4.5的“智能天花板”争夺战——谁才是大模型时代的算力之王?
  • Python常见面试题的详解16
  • Chrome 推出全新的 DOM API,彻底革新 DOM 操作!
  • 250223-Linux/MacOS如何跳过Miniconda的条款阅读,直接安装Miniconda
  • Docker部署 MongoDB及常用命令
  • java八股文之数据库
  • 超高清大图渲染性能优化实战:从页面卡死到流畅加载
  • 短剧源码搭建部署海外短剧系统
  • sql的索引与性能优化相关
  • 【新手初学】SQL注入之二次注入、中转注入、伪静态注入
  • 【愚公系列】《鸿蒙原生应用开发从零基础到多实战》002-TypeScript 类型系统详解
  • 2025年AI科技热点全景:人形机器人量产、垂类应用崛起与推理模型革新引领未来
  • ubuntu环境中安装latex并使用vscode
  • 区块链共识机制详解
  • [250222] Kimi Latest 模型发布:尝鲜最新特性与追求稳定性的平衡 | SQLPage v0.33 发布