zoukankan      html  css  js  c++  java
  • 洛谷 P1183 多边形的面积

    题目描述

    给出一个简单多边形(没有缺口),它的边要么是垂直的,要么是水平的。要求计算多边形的面积。

    多边形被放置在一个 X-YXY 的卡笛尔平面上,它所有的边都平行于两条坐标轴之一。然后按逆时针方向给出各顶点的坐标值。所有的坐标值都是整数(因此多边形的面积也为整数)。

    输入输出格式

    输入格式:

     

    第一行给出多边形的顶点数 n(n≤100)n(n100) 。接下来的几行每行给出多边形一个顶点的坐标值 XX 和 YY (都为整数并且用空格隔开)。顶点按逆时针方向逐个给出。并且多边形的每一个顶点的坐标值 -200≤x,y≤200200x,y200 。多边形最后是靠从最后一个顶点到第一个顶点画一条边来封闭的。

     

    输出格式:

     

    一个整数,表示多边形的面积。

     

    输入输出样例

    输入样例#1: 复制
    10
    0 0
    4 0
    4 1
    3 1
    3 3
    2 3
    2 2
    1 2
    1 3
    0 3
    输出样例#1: 复制
    9
    思路:皮克公式 +搜索。
    #include<queue>
    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    #define MAXN 110
    using namespace std;
    int n,ans,bns;
    int map[501][501];
    int dx[4]={0,0,1,-1};
    int dy[4]={1,-1,0,0};
    struct nond{
        int x,y;
    }point[MAXN];
    void dfs(int x,int y){
        if(x>400||x<0||y>400||y<0||map[x][y]!=0)    return ;
        map[x][y]=1;ans++;
        dfs(x+1,y);dfs(x-1,y);
        dfs(x,y+1);dfs(x,y-1);
    }
    int main(){
        scanf("%d",&n);
        point[0].x=-1;point[0].y=-1;
        for(int i=1;i<=n+1;i++){
            if(i<=n){
                scanf("%d%d",&point[i].x,&point[i].y);
                point[i].x+=200;point[i].y+=200;bns++;
            }
            if(i==1){
                point[n+1].x=point[1].x;
                point[n+1].y=point[1].y;
            }
            if(point[i].x==point[i-1].x){
                int mi=min(point[i].y,point[i-1].y);
                int ma=max(point[i].y,point[i-1].y);
                for(int j=mi;j<=ma;j++)    map[point[i].x][j]=1;
                bns+=ma-mi-1;
            }    
            else if(point[i].y==point[i-1].y){
                int mi=min(point[i].x,point[i-1].x);
                int ma=max(point[i].x,point[i-1].x);
                for(int j=mi;j<=ma;j++)    map[j][point[i].y]=1;
                bns+=ma-mi-1;
            }    
        }
        dfs(point[1].x+1,point[1].y+1);
        cout<<ans+bns/2-1;
    }
     
    细雨斜风作晓寒。淡烟疏柳媚晴滩。入淮清洛渐漫漫。 雪沫乳花浮午盏,蓼茸蒿笋试春盘。人间有味是清欢。
  • 相关阅读:
    监控 Linux 性能的 18 个命令行工具
    VS2015中无法查找或打开 PDB 文件
    C1853 编译器错误:fatal error C1853: 'pjtname.pch' precompiled header file is from a previous
    malloc用法
    C语言中i++和++i的区别
    vs未定义的标识符“round”ceil()和floor()
    error C2065: “uint8_t”: 未声明的标识符
    strtol 函数用法
    C++ “string”: 未声明的标识符
    C++ 中c_str()函数
  • 原文地址:https://www.cnblogs.com/cangT-Tlan/p/9334471.html
Copyright © 2011-2022 走看看