圈水池

时间限制:3000 ms  |  内存限制:65535 KB

难度:4

描述
有一个牧场,牧场上有很多个供水装置,现在牧场的主人想要用篱笆把这些供水装置圈起来,以防止不是自己的牲畜来喝水,各个水池都标有各自的坐标,现在要你写一个程序利用最短的篱笆将这些供水装置圈起来!(篱笆足够多,并且长度可变)

输入
第一行输入的是N,代表用N组测试数据(1<=N<=10)
第二行输入的是m,代表本组测试数据共有m个供水装置(3<=m<=100)
接下来m行代表的是各个供水装置的横纵坐标
输出
输出各个篱笆经过各个供水装置的坐标点,并且按照x轴坐标值从小到大输出,如果x轴坐标值相同,再安照y轴坐标值从小到大输出
样例输入
1

4

0 0

1 1

2 3

3 0

样例输出
0 0
2 3
3 0

#include <iostream>

#include <cmath>

#include <algorithm>

using namespace std;

/*

PointSet[]: 输入的点集

ch[]:输出的凸包的点集,按照逆序输出

n:PointSet中点的数目

len:输出的凸包上的点的个数

*/

struct Point{

float x,y;

};

//小于说明向量p0p1的极角大于p0p2的极角

float multiply(Point p1,Point p2,Point p0)

{

return ((p1.x-p0.x)*(p2.y-p0.y) -(p2.x-p0.x)*(p1.y-p0.y));

}

float dis(Point p1,Point p2)

{

return sqrt((p1.x-p2.x)*(p1.x -p2.x) + (p1.y-p2.y)*(p1.y-p2.y));

}

void Graham_scan(Point PointSet[],Point ch[],int n,int &len)

{

int i,j,k=0,top = 2;

Point tmp;

for (i=1;i<n;i++)

if ((PointSet[i].y<PointSet[k].y ||((PointSet[i].y==PointSet[k].y)) &&(PointSet[i].x <PointSet[k].x)))

k=i;

tmp =PointSet[0];

PointSet[0]=PointSet[k];

PointSet[k]=tmp;

//按极角大小排序

for (i=1;i<n-1;i++)

{

k=i;

for (j=i+1;j<n;j++)

{

if ((multiply(PointSet[j],PointSet[k],PointSet[0])>0)

||((multiply(PointSet[j],PointSet[k],PointSet[0])==0)

&& (dis(PointSet[0],PointSet[j]) < dis(PointSet[0],PointSet[k]))))

{

tmp = PointSet[j];

PointSet[j] = PointSet[k];

PointSet[k] = tmp;

}

}

}

ch[0] = PointSet[0];

ch[1] = PointSet[1];

ch[2] = PointSet[2];

for (i=3;i<n;i++)

{

while (multiply(PointSet[i],ch[top],ch[top-1])>0)

top--;

ch[++top] = PointSet[i];

}

len = top+1;

}

const int maxN = 1000;

Point PointSet[maxN];

Point ch[maxN];

int n;

int len;

int cmp(const void *a,const void *b)

{

Point pa = *(Point *)a;

Point pb = *(Point *)b;

if (pa.x>pb.x)

return 1;

else if((pa.x ==pb.x) &&pa.y>pb.y)

return 1;

else return -1;

}

void solve()

{

int n,i;

cin>>n;

for (i=0;i<n;i++)

cin>>PointSet[i].x>>PointSet[i].y;

Graham_scan(PointSet,ch,n,len);

qsort(ch,len,sizeof(ch[0]),cmp);

for (i=0;i<len;i++)

cout<<ch[i].x<<" "<<ch[i].y<<endl;

}

int main()

{

int n;

cin>>n;

while (n--)

{

solve();

}

}

转载于:https://www.cnblogs.com/zhijzan/archive/2012/04/12/2444963.html

NYOJ - 78 圈水池 【凸包】相关推荐

  1. nyoj 78:圈水池 【凸包入门】

    题目链接 将所有点按从左至右顺序排序,然后将所有点先从左到右扫描再从右到左扫描,逐渐将凸包轮廓"勾勒"出来 (凸包轮廓满足,轮廓上连续的三个点按先后顺序给出的话呈逆时针方向) 最后 ...

  2. NYOJ 253LK的旅行(凸包 对踵点)

    LK的旅行 时间限制:2000 ms  |  内存限制:65535 KB 难度:5 描述 LK最近要去某几个地方旅行,她从地图上计划了几个点,并且用笔点了出来,准备在五一假期去这几个城市旅行.现在希望 ...

  3. Monotone Chain Convex Hull(单调链凸包)

    1 Monotone Chain Convex Hull(单调链凸包)算法伪代码: 2 //输入:一个在平面上的点集P 3 //点集 P 按 先x后y 的递增排序 4 //m 表示共a[i=0...m ...

  4. 刘墉写给女儿的 忠告

    跨一步,就成功 作者:刘墉 刘墉以跟女儿交谈的方式深入探讨处世.使用时间.运动.写作.记忆等问题,更可贵的是他提出了许多切实可行的方法.他谈得非常具体,具体到怎样跟男生打交道.什么时间做什么事情.怎样 ...

  5. 非常感人非常激发人的潜能的信,你一定要看!

    刘墉写给女儿的信 著名美籍华人艺术家.教育家成功培育一双儿女,儿子获哈佛博 士,女儿获布什总统奖,该书写给女儿,教她<跨一步,就成功> 你能拒绝诱惑吗? 孩子,我最近发现你看电视的时间愈来 ...

  6. 初学者制作VMOS场效应管小功放

    VMOS场效应管既有 电子管的优点又有晶体管的优点,用它 制作的功率放大器声音醇厚.甜美,动态范围大.频率响应好,因此近年来在 音响 设备中得到了广泛应用. 大功率的场效应管功率放大器,电.路比较复杂 ...

  7. dlib库 眨眼 张嘴

    这里写目录标题 只有眨眼 重新编写 改为摄像头 加上张嘴 只有眨眼 重新编写 import cv2 as cv import dlib import imutils import numpy as n ...

  8. 刚開始学习的人制作VMOS场效应管小功放

    VMOS场效应管既有电子管的长处又有晶体管的长处,用它制作的功率放大器声音醇厚.甜美,动态范围大.频率响应好.因此近年来在音响设备中得到了广泛应用. 大功率的场效应管功率放大器.电.路比較复杂.制作和 ...

  9. 计算机计算车速的方法,告别一脸懵逼 简单公式教会你计算车速

    [卡车之家 原创]对于货运行业来说,运营效率往往意味着能不能赚到更多的钱.因此,车速就成为很多人买车时关心的热点问题了,那么车辆究竟能跑多快,经济转速下最快时速是多少呢?今天我们就一起来算一算. ● ...

最新文章

  1. asp从后台调出的公式怎么参与运算_SEOr怎么写一个快速排名的标题
  2. “输入字符不是 MATLAB 语句或表达式中的有效字符”的解决办法
  3. 9号团队-团队任务4:每日立会(2018-11-26,2018-11-27)
  4. php如何压缩txt文件怎么打开,PHP-压缩txt文件,同时保持文件扩展名
  5. list::splice函数的用法与参数解释
  6. Python-第三方库requests详解
  7. FastReport.net 使用记录
  8. (解题报告)L1-032 Left-pad (20分)——15行代码AC
  9. js正则匹配闭合标签_正则匹配闭合HTML标签(支持嵌套)
  10. CCF CSP 201809-1 卖菜
  11. R40使用GPIO中断实现按键功能【原创】
  12. 操作系统swap对redis的性能的影响以及解决方案
  13. Express 4.x Node.js的Web框架----《转载》
  14. java项目-第58期基于ssm的酒店管理系统
  15. linux wget 整站克隆/仿站 整个网站的静态源码下载到本地 4种扒站工具(webzip、ha_TeleportPro、Offline Explorer、wget)
  16. 据说大学录取率是90%,我对大米的期许是考上高中
  17. 电商数据分析:FAST指标体系-用户矩阵分析模型
  18. 安卓模拟器绕过模拟器检测正常用电脑玩手机游戏的最好解决方法
  19. 本地的项目上传到 Git 仓库的步骤-超详细
  20. 2012 款斯柯达明锐车行驶中发动机偶尔自动熄火

热门文章

  1. 当导用模块与包的import与from的问题(模块与包的调用)
  2. Python功能之反射
  3. AaronYang WCF教程目录
  4. 【注册机】Zillions of Games v2.0.1p 注册机
  5. python量化数据处理小细节2
  6. python自带的解释器叫做_python学习
  7. php多文件上传存储到表,PHP 实现一种多文件上传的方法
  8. oracle rds 运维服务_从运维的角度分析使用阿里云数据库RDS的必要性–你不应该在阿里云上使用自建的MySQL/SQL Server/Oracle/PostgreSQL数据库...
  9. Java笔记03-Constructor Override
  10. python命令方式和关键字