题213.2022寒假天梯赛训练-7-13 肿瘤诊断 (30 分)

news/2024/7/15 19:34:03 标签: 算法, 图论, bfs

文章目录

  • 题213.2022寒假天梯赛训练-7-13 肿瘤诊断 (30 分)
  • 一、题目
  • 二、题解


题213.2022寒假天梯赛训练-7-13 肿瘤诊断 (30 分)


一、题目

在这里插入图片描述
在这里插入图片描述

二、题解

开始看这题的时候就没懂啥意思,想好久才知道我们可以把L个M*N的切片叠起来变成一个MNL的三维立体(切片+像素连通“上下左右前后”暗示),之后在三维立体中去bfs找连通集(连通体暗示),只有连通集的点数>=T,才加入到总体积。依上述操作,代码如下:

#include <bits/stdc++.h>

using namespace std;

//定义每次试探的规则,左右前后上下
const int dx[6]={0,0,1,-1,0,0};
const int dy[6]={-1,1,0,0,0,0};
const int dz[6]={0,0,0,0,1,-1};

int M,N,L,T;

struct Point//开一个结构体去存点,方便操作
{
    int x,y,z;
    Point(int x,int y,int z)//构造方法便于造点
    {
        this->x=x;
        this->y=y;
        this->z=z;
    }
};

int bfs(vector<vector<vector<int>>> &G,vector<vector<vector<int>>> &vis,Point p0)
{
    int num=0;
    queue<Point> q;
    q.push(p0);
    vis[p0.x][p0.y][p0.z]=1;//标记访问
    while(!q.empty())
    {
        Point temp=q.front();
        num++;
        q.pop();
        for(int i=0;i<6;i++)//探寻找周围为1且没有被访问过的像素点
        {
            if(vis[temp.x+dx[i]][temp.y+dy[i]][temp.z+dz[i]]!=1&&G[temp.x+dx[i]][temp.y+dy[i]][temp.z+dz[i]]==1)
            {
                q.push(Point(temp.x+dx[i],temp.y+dy[i],temp.z+dz[i]));
                vis[temp.x+dx[i]][temp.y+dy[i]][temp.z+dz[i]]=1;
            }
        }
    }
    if(num>=T)//体积大于等于T才能算
    {
        return num;
    }
    else
    {
        return 0;
    }
}

int main()
{
    cin>>M>>N>>L>>T;
    vector<vector<vector<int>>> G(M+2,vector<vector<int>>(N+2,vector<int>(L+2,0)));//定义每一维长度都是原长度+2的三维数组去存图,初始化为0
    vector<vector<vector<int>>> vis(M+2,vector<vector<int>>(N+2,vector<int>(L+2,0)));//vis记录该点是否被访问过
    for(int k=1;k<=L;k++)
    {
        for(int i=1;i<=M;i++)
        {
            for(int j=1;j<=N;j++)
            {
                scanf("%d",&G[i][j][k]);//输入图
            }
        }
    }
    int total=0;
    for(int k=1;k<=L;k++)
    {
        for(int i=1;i<=M;i++)
        {
            for(int j=1;j<=N;j++)
            {
                if(vis[i][j][k]!=1&&G[i][j][k]==1)//只有为该点为异常像素并且先前没有被访问过才去bfs访问
                {
                    total+=bfs(G,vis,Point(i,j,k));//每次bfs都会得到体积加入到总体积中
                }
            }
        }
    }
    cout<<total;
}


http://www.niftyadmin.cn/n/1061792.html

相关文章

UltraWebGrid 固定表头表尾

把Grid的TableLayout属性设为&#xff1a;Fixed ; UseFixedHeaders设为&#xff1a;True //这是指定Grid允许固定列 StationaryMargins"Headerandfooter" //这使Header始终在最上面显示 设置 转载于:https://www.cnblogs.com/xiayan/p/3772832.html

Codeforces VK Cup 2012 Round 3 A. Variable, or There and Back Again(dfs)

题目链接&#xff1a;http://codeforces.com/problemset/problem/164/A 思路&#xff1a;用vector分别保留原图和发图&#xff0c;然后分别从val值为1的点正向遍历&#xff0c;va值为2的点反向遍历&#xff0c;如果某个点这两种方式都可以遍历到&#xff0c;则输出1&#xff0c…

题215.2022寒假天梯赛训练-7-15 长城 (30 分)

文章目录题215.2022寒假天梯赛训练-7-15 长城 (30 分)一、题目二、题解题215.2022寒假天梯赛训练-7-15 长城 (30 分) 一、题目 二、题解 依题意分析我们会发现&#xff0c;你要想监视到长城的每一处你就必须要重点关照那个凹点的位置&#xff0c;从南到北过去&#xff0c;你必须…

使用CSS兄弟选择器完成复杂垂直边距(vertical margins)的设计

-------------------sibling选择器如何在完成复杂设计要求的同时&#xff0c;保持CSS可读 这是web前端开发过程中开始简单逐步变的复杂的例子之一&#xff1a;将一篇文章中的所有元素应用垂直边距&#xff08;vertical margins&#xff09;&#xff0c;例如由复杂markdown编译来…

【Android】Android软件开发之ListView 详解

原创作品&#xff0c;允许转载&#xff0c;转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://xys289187120.blog.51cto.com/3361352/657171ListView的使用方法 ListView是Android软件开发中非常重要组件之一&#xff0c;基本上是个软…

5.2 上午

学习英语——《恋练有词》 转载于:https://www.cnblogs.com/bgd140206110/p/6797723.html

题219.2022寒假天梯赛训练-7-5 福到了 (15 分)

文章目录题219.2022寒假天梯赛训练-7-5 福到了 (15 分)一、题目二、题解题219.2022寒假天梯赛训练-7-5 福到了 (15 分) 一、题目 二、题解 这里是用二维数组存输入的字符&#xff0c;注意输入的问题 #include <bits/stdc.h>using namespace std;char a[100][100],tmp[100…

Linux使用free命令查看实际内存占用

转自:http://www.cnblogs.com/pengdonglin137/p/3315124.html Linux下在终端环境下可以使用free命令看到系统实际使用内存的情况&#xff0c;一般用free -m方式查看内存占用情况&#xff08;兆为单位&#xff09;。而系统实际可用内存是不是free部分呢&#xff0c;不是的&#…