zoukankan      html  css  js  c++  java
  • 百练2713:肿瘤面积

    总时间限制: 
    1000ms
     
    内存限制: 
    65536kB
    描述

    在一个正方形的灰度图片上,肿瘤是一块矩形的区域,肿瘤的边缘所在的像素点在图片中用0表示。其它肿瘤内和肿瘤外的点都用255表示。现在要求你编写一个程序,计算肿瘤内部的像素点的个数(不包括肿瘤边缘上的点)。已知肿瘤的边缘平行于图像的边缘。

    输入
    只有一个测试样例。第一行有一个整数n,表示正方形图像的边长。其后n行每行有n个整数,取值为0或255。整数之间用一个空格隔开。已知n不大于1000。
    输出
    输出一行,该行包含一个整数,为要求的肿瘤内的像素点的个数。
    样例输入
    5
    255 255 255 255 255
    255 0 0 0 255
    255 0 255 0 255
    255 0 0 0 255
    255 255 255 255 255
    
    样例输出
    1
    提示
    如果使用静态数组来表示图片数据,需要将该数组定义成全局变量。
    来源
        2005~2006医学部计算概论期末考试
    分析
             从左至右从上到下地扫描该图片,这样可以保证找到肿瘤边界时(即值为0的坐标时),该坐标是肿瘤的左上角的点。
        从这个点出发,向右和向下扫描,统计这个肿瘤的长和宽,并将肿瘤的边界打上标记,下次再扫描到的时候直接跳过。
    #include <cstdio>
    #define N 1002
    using namespace std;
    int g[N][N];
    bool mark[N][N];
    struct node{
        int x,y;
    };
    /*
    5
    0 0 0 0 0
    0 255 255 255 0
    0 255 255 255 0
    0 0 0 0 0
    255 255 255 255 255
    (*/
    int sum;
    int main(){
        int n;
        scanf("%d",&n);
        node s;
        bool first = true;
        for(int i = 0;i < n;i++)
            for(int j = 0;j < n;j++){
                scanf("%d",&g[i][j]);
            }
        sum = 0;
        for(int i = 0;i < n;i++)
        for(int j = 0;j < n;j++){
            if(mark[i][j] == 0 && g[i][j] == 0){
                int right,down;
                right = down = n - 1;
                for(int p = j;p < n;p++){
                    if(g[i][p] == 0)
                        mark[i][p] = 1;
                    else{
                        right = p-1;
                        break;
                    }
                }
                for(int q = i;q < n;q++){
                    if(g[q][j] == 0){
                        mark[q][j] = 1;
                        mark[q][right] = 1;
                    }else{
                        down = q-1;
                        break;
                    }
                }
    
                for(int p = j;p < right;p++){
                    mark[down][p] = 1;
                }
                sum += (right-j-1) * (down-i-1);
    
            }
    
        }
    
        printf("%d",sum);
    
    }
  • 相关阅读:
    量子和量子化?
    ARM内核和架构都是什么意思,内核和架构的关系是什么?(转)
    线程,进程,协程
    关于Redis的问题
    python一些语法糖用法
    Python装饰器详解
    Python基础知识
    Pyinstaller安装以及参数使用
    正则表达式(特殊字符)/Xpath语法/CSS选择器
    还在为身份验证引入的Microsoft.AspNet.Identity.EntityFramework导致多上下文,生成的DB改名困扰吗?
  • 原文地址:https://www.cnblogs.com/starryxsky/p/7101829.html
Copyright © 2011-2022 走看看