L3-004 肿瘤诊断(dfs错误版)

嗯,嗯,嗯,dfs会爆掉.........

那咋了,谁让我一眼dfs

爆就爆吧

以下是错误代码/(ㄒoㄒ)/~~

#include <bits/stdc++.h>
using namespace std;
#define vi vector<int>
#define sz(x) (int)x.size()
//2025.3.24
struct o{
    int a[1303][133];
};
vector<o>arr(63);
int n,m,l,t;
int check(int f,int x,int y){
    if(f<0||x<0||y<0||f>=l||x>=n||y>=m)return 0;
    return 1;
}
int summ=0;
map<int,int>ans;
int idx;
int opf[]={0,0,0,0,-1,1};
int opx[]={0,1,0,-1,0,0};
int opy[]={1,0,-1,0,0,0};
int vis[63][1303][133];
void dfs(int f,int x,int y,int gg){
    if(!check(f,x,y))return;
    if(vis[f][x][y]==1||arr[f].a[x][y]==0)return;
    vis[f][x][y]=1;
    if(arr[f].a[x][y]==1){
        if(gg==-1){gg=idx+1;idx++;}
        ans[gg]++;
    }
    for(int i=0;i<6;i++){
        if(check(f+opf[i],x+opx[i],y+opy[i])){
            if(!vis[f+opf[i]][x+opx[i]][y+opy[i]])dfs(f+opf[i],x+opx[i],y+opy[i],gg);
        }
    }

}
void solve(){
    cin>>n>>m>>l>>t;
    for(int i=0;i<l;i++){
        for(int j=0;j<n;j++){
            for(int k=0;k<m;k++){
                cin>>arr[i].a[j][k];//读入
            }
        }
    }
    for(int i=0;i<l;i++){
        for(int j=0;j<n;j++){
            for(int k=0;k<m;k++){
                dfs(i,j,k,-1);
            }
        }
    }
    vector<pair<int,int>>r(ans.begin(),ans.end());
    for(int i=0;i<sz(r);i++){
        if(r[i].second>=t)summ+=r[i].second;
    }
    cout<<summ;

}

signed main()
{
    solve();
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值