(BFS)L3-004 肿瘤诊断 (30分)

题目链接:L3-004 肿瘤诊断 (30分)

  1. 两个像素被认为是“连通的”,如果它们有一个共同的切面 --->从这句话推断出这题是一个三维BFS的题
  2. 用一个三维数组存放数据,遍历每一个数据,因为这里的数据是0和1就用原数据来记录标记它,计算每一个元素周围的体积(数连通体中1的个数),大于t就累加到体积里面

代码如下:

#include<iostream>
#include<queue>

using namespace std;

const int N = 140, M = 1300,L = 70;

struct Node{
    int x,y,z;
};

int mp[L][M][N];
int dx[6] = {0,1,0,-1,0,0};
int dy[6] = {1,0,-1,0,0,0};
int dz[6] = {0,0,0,0,1,-1};
int n,m,l,t;
int ans;

void bfs(int i,int j,int k){
    queue<Node> q;
    int sum = 1;
    mp[i][j][k] = 0;
    q.push({j,k,i});
    while(q.size()){
        Node t = q.front();
        q.pop();
        for(int i = 0; i < 6; i ++ ){
            int a = t.x + dx[i];
            int b = t.y + dy[i];
            int c = t.z + dz[i];
            if(a < 0 || a > n-1 || b < 0 || b > m-1 || c < 0 || c > l-1){
                continue;
            }
            if(!mp[c][a][b]) continue;
            mp[c][a][b] = 0;
            sum ++;
            q.push({a,b,c});
        }
    }
    if(sum >= t) ans += sum;
}
int main(){
    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 >> mp[i][j][k];
            }
        }
    }
    for(int i = 0; i < l; i ++ ){
        for(int j = 0; j < n; j ++ ){
            for(int k = 0; k < m; k ++ ){
                if(mp[i][j][k]) bfs(i,j,k);
            }
        }
    }
    cout<<ans;
    return 0;
}
全部评论

相关推荐

AI牛可乐:哇,听起来你很激动呢!杭州灵枢维度科技听起来很厉害呀~你逃课去白马培训,老冯会同意吗?不过既然你这么感兴趣,肯定是有原因的吧! 对了,想了解更多关于这家公司或者求职相关的问题吗?可以点击我的头像私信我哦,我可以帮你更详细地分析一下!
你都用vibe codi...
点赞 评论 收藏
分享
03-04 17:20
电力电子工程师
YOUXIANG:你的实习经历和你的项目对不上,搞电源的为什么不去电源厂实习。简历字有点多?单反激和PFC LLC两个项目,技术面可以问的东西都特别多,细节很多,磁性元件设计那些。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务