题目描述

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

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

输入输出格式

输入格式:

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

输出格式:

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

输入输出样例

输入样例#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[][];
int dx[]={,,,-};
int dy[]={,-,,};
struct nond{
int x,y;
}point[MAXN];
void dfs(int x,int y){
if(x>||x<||y>||y<||map[x][y]!=) return ;
map[x][y]=;ans++;
dfs(x+,y);dfs(x-,y);
dfs(x,y+);dfs(x,y-);
}
int main(){
scanf("%d",&n);
point[].x=-;point[].y=-;
for(int i=;i<=n+;i++){
if(i<=n){
scanf("%d%d",&point[i].x,&point[i].y);
point[i].x+=;point[i].y+=;bns++;
}
if(i==){
point[n+].x=point[].x;
point[n+].y=point[].y;
}
if(point[i].x==point[i-].x){
int mi=min(point[i].y,point[i-].y);
int ma=max(point[i].y,point[i-].y);
for(int j=mi;j<=ma;j++) map[point[i].x][j]=;
bns+=ma-mi-;
}
else if(point[i].y==point[i-].y){
int mi=min(point[i].x,point[i-].x);
int ma=max(point[i].x,point[i-].x);
for(int j=mi;j<=ma;j++) map[j][point[i].y]=;
bns+=ma-mi-;
}
}
dfs(point[].x+,point[].y+);
cout<<ans+bns/-;
}
 

最新文章

  1. Objective-C中block的底层原理
  2. ios打包ipa的四种实用方法(.app转.ipa)
  3. [BI项目记]-新任务处理
  4. yii的验证码
  5. Windows Phone 四、控件模版
  6. jQuery 互相调用iframe页面中js的方法
  7. bsp STEP
  8. MyBatis 内连接association 左外连接collection
  9. Linkedlist,arrayDeque,HashMap,linkedHashMap
  10. j-query j-query
  11. WPF 之 资源(Resource)
  12. 精通 Oracle+Python,第 5 部分:存储过程、Python 编程
  13. python运维开发之第五天
  14. Android的消息机制
  15. web自动化测试从入门到持续集成(selenium webdriver)
  16. Xcode iOS布局autolayout和sizeclass的使用
  17. UOJ#104. 【APIO2014】Split the sequence 动态规划 斜率优化
  18. cas单点登录-https的配置(一)
  19. MySQL 的安装
  20. oracle密码过期问题解决

热门文章

  1. ECharts Map 属性详解
  2. centOS linux 下PHP编译安装详解
  3. js添加千位分隔符
  4. JS对json中某字段进行排序
  5. [分享] IMX6嵌入式开发板linux QT挂载U盘及TF卡
  6. loadrunner 响应时间和TPS
  7. 02Document Type Definition
  8. VirtualBox中的Linux读取Windows共享目录
  9. python send email
  10. Java随机数使用