百练OJ:3865和2677:肿瘤检测

来源:互联网 发布:华为手机网络诊断 编辑:程序博客网 时间:2024/05/18 18:53

题目链接:肿瘤检测

描述:一张CT扫描的灰度图像可以用一个N*N(0<N<100)的矩阵描述,矩阵上的每个点对应一个灰度值(整数),其取值范围是0-255。我们假设给定的图像中有且只有一个肿瘤。在图上监测肿瘤的方法如下:如果某个点对应的灰度值小于等于50,则这个点在肿瘤上,否则不在肿瘤上。我们把在肿瘤上的点的数目加起来,就得到了肿瘤在图上的面积。任何在肿瘤上的点,如果它是图像的边界或者它的上下左右四个相邻点中至少有一个是非肿瘤上的点,则该点称为肿瘤的边界点。肿瘤的边界点的个数称为肿瘤的周长。现在给定一个图像,要求计算其中的肿瘤的面积和周长。
输入:输入第一行包含一个正整数N(0<N<100),表示图像的大小;接下来N行,每行包含图像的一行。图像的一行用N个整数表示(所有整数大于等于0,小于等于255),两个整数之间用一个空格隔开。
输出:输出只有一行,该行包含两个正整数,分别为给定图像中肿瘤的面积和周长,用一个空格分开。

设计思路:

首先将图像扩大一圈,目的是为了将图像的边界的点的检测条件与非图像边界的点的检测条件相同,之后对每个点进行检测,设置计数器,最终输出结果即可

代码如下:

#include <iostream>using namespace std;int main(){    int n,c=0,s=0;    cin>>n;    int lists[n+2][n+2] ;    for(int k=0;k<n+2;k++){        lists[k][0]=255;        lists[0][k]=255;        lists[k][n+1]=255;        lists[n+1][k]=255;    }    for(int i=1;i<=n;i++){        for(int j=1;j<=n;j++){            cin>>lists[i][j];        }    }    for (int i=1;i<=n;i++){        for(int j=1;j<=n;j++){            if(lists[i][j]<=50){                s++;                if(lists[i+1][j]>50||lists[i-1][j]>50||                   lists[i][j+1]>50||lists[i][j-1]>50){                    c++;                }            }        }    }    cout <<s<<" "<<c << endl;    return 0;}