ACM:凸包问题
来源:互联网 发布:wifi信号与网络延时 编辑:程序博客网 时间:2024/05/23 17:57
#include <stdio.h>#include <math.h>#include <stdlib.h>typedef struct{ double x; double y;}POINT;POINT result[102]; //保存凸包上的点POINT a[102]; int n,top;double Distance(POINT p1,POINT p2) //两点间的距离{ return sqrt((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y));}double Multiply(POINT p1,POINT p2,POINT p3) //叉积{ return ((p2.x-p1.x)*(p3.y-p1.y)-(p2.y-p1.y)*(p3.x-p1.x)); }int Compare(const void *p1,const void *p2){ POINT *p3,*p4; double m; p3=(POINT *)p1; p4=(POINT *)p2; m=Multiply(a[0],*p3,*p4) ; if(m<0) return 1; else if(m==0&&(Distance(a[0],*p3)<Distance(a[0],*p4))) return 1; else return -1;}void Tubao(){ int i; result[0].x=a[0].x; result[0].y=a[0].y; result[1].x=a[1].x; result[1].y=a[1].y; result[2].x=a[2].x; result[2].y=a[2].y; top=2; for(i=3;i<=n;i++) { while(Multiply(result[top-1],result[top],a[i])<=0 && top>2) top--; result[top+1].x=a[i].x; result[top+1].y=a[i].y; top++; }}int main(){ int i,p; double px,py,len,temp; while(scanf("%d",&n)!=EOF,n) { for(i=0;i<n;i++) scanf("%lf%lf",&a[i].x,&a[i].y); if(n==1) { printf("0.00\n"); continue; } else if(n==2) { printf("%.2lf\n",Distance(a[0],a[1])); continue; } py=-1; for(i=0;i<n;i++) { if(py==-1 || a[i].y<py) { px=a[i].x; py=a[i].y; p=i; } else if(a[i].y==py && a[i].x<px) { px=a[i].x; py=a[i].y; p=i; } } //swap(a[0],a[p]) temp=a[0].x; a[0].x=a[p].x; a[p].x=temp; temp=a[0].y; a[0].y=a[p].y; a[p].y=temp; qsort(&a[1],n-1,sizeof(double)*2,Compare); a[n].x=a[0].x; a[n].y=a[0].y; Tubao(); len=0.0; for(i=0;i<top;i++) len=len+Distance(result[i],result[i+1]); printf("%.2lf\n",len); } return 0;}
洛水成诗
阅读全文
0 0
- ACM -- 凸包问题
- ACM:凸包问题
- acm几何凸包hdu1392
- [ACM] hdu Wall (凸包周长)
- 凸包问题
- 凸包问题
- poj2187 凸包问题
- 凸包问题
- 凸包问题
- 凸包问题
- 凸包问题
- 凸包问题
- 凸包问题
- 凸包问题
- 凸包问题-蛮力法
- 凸包问题
- 凸包问题
- 凸包问题
- [Leetcode] 375. Guess Number Higher or Lower II 解题报告
- 常用的JS类定义方法
- ORA-00604: 递归 SQL 级别 1 出现错误 ORA-01653: 表 SYS.AUD$ 无法通过 8192 (在表空间 SYSTEM 中) 扩展
- python requests用url爬妹子套图保存在文件夹
- 理解OSI 七层模型这一篇足够了
- ACM:凸包问题
- Java设计模式---策略者模式
- HashMap和Hashtable的遍历
- keystone v3接口下,域管理员、项目管理员简单的判断方式
- java 泛型类 和 泛型函数 的介绍
- JAVA中int、String的类型转换
- HTML元素的显示优先级
- golang web流量统计 上
- 使用java代码计算不死神兔的数量