题目描述: http://poj.org/problem?id=2420
题目大意: 其实是求n 边形的费马点, 即到n 边形的n 个顶点距离和最小的点,
该题要求计算出最小距离, 并四舍五入.
算法大意: 先拿一个点(该算法用n 个顶点的x, y 坐标和的均值所在的点)去计算距离和
最小值, 然后拿它的四个方向上的点去测试比较哪个点更优, 不断
迭代, 最终得到在精度允许下的费马点.
#include <cstdio> #include <cmath> struct point { double x, y; point() { x = y = 0.0; } }; //返回两点间的距离 inline double mydistance(point p1, point p2) { return sqrt((p1.x - p2.x) * (p1.x - p2.x) + (p1.y - p2.y) * (p1.y - p2.y)); } //求n 边形的费马点(参数p_fermat), 返回最小距离和 double fermat_point(point p[], int n, point& p_fermat) { point u, v; double step = 0.0, curlen, explen, minlen; int i, j, k, idx; bool flag; //u.x = u.y = v.x = v.y = 0.0; //point "构造函数" for(i = 0; i < n; i++) { step += fabs(p[i].x) + fabs(p[i].y); u.x += p[i].x; u.y += p[i].y; } u.x /= n; u.y /= n; flag = 0; while(step > 1e-10) { for(k = 0; k < 10; step /= 2, k++) for(i = -1; i <= 1; i++) for(j = -1; j <= 1; j++) { v.x = u.x + step * i; v.y = u.y + step * j; curlen = explen = 0.0; for(idx = 0; idx < n; idx++) { curlen += mydistance(u, p[idx]); explen += mydistance(v, p[idx]); } if(curlen > explen) { u = v; minlen = explen; flag = 1; } } } p_fermat = u; return flag ? minlen : curlen; } int main() { point ploygon[101], p_fermat; double len; int n; while(scanf("%d", &n) != EOF) { for(int i = 0; i < n; i++) scanf("%lf %lf", &ploygon[i].x, &ploygon[i].y); len = fermat_point(ploygon, n, p_fermat); // rounded to the nearest integer /* if(len - (int)len > 0.5) printf("%d\n", (int)(len + 1)); else printf("%d\n", int(len)); */ printf("%d\n", int(len + 0.5)); } return 0; }
以上算法参考自代码疯子的博客:http://www.programlife.net/poj-2420-polygon-fermat-point.html
发表评论
-
ACM 之 Java BigInteger
2011-06-01 20:26 0Java 的大整数类在ACM 中大有用武之地 ... -
判断点是否构成多边形, 顶点连续给出
2011-05-26 14:27 0#include <cstdio> #inc ... -
poj pku 1981 Circle and Points 点与圆 位置关系
2011-05-26 11:29 1294题目描述: http://poj.org/problem?id ... -
poj 1032 Parliament 数学
2011-05-25 17:34 1243题目描述: http://poj.org/problem?i ... -
poj 1385 Lifting the Stone 多边形重心
2011-05-25 11:13 1069题目描述: http://poj.org/problem?i ... -
poj 2676 Sudoku dfs 深搜
2011-05-16 21:05 902题目描述: http://poj.org/problem?i ... -
hdoj 2064 汉诺塔III 递推
2011-05-15 22:29 919题目描述: http://acm.hdu.edu.cn/sh ... -
hdoj 1207 汉诺塔II dp 动态规划
2011-05-15 21:22 1710题目描述: http://acm.hdu.edu.cn/sh ... -
poj 2506 Tiling 递推
2011-05-15 11:18 948题目描述: http://poj.org/problem?i ... -
poj 2954 Triangle Pick 定理
2011-05-14 16:36 1181题目描述: http://poj.org/problem?i ... -
poj 1012 Joseph
2011-05-10 17:42 1270题目描述:poj.org/problem?id=10 ... -
zoj 1081 Points Within 点与多边形关系
2011-05-07 17:51 1174题目描述: http://acm.zju.edu.cn/on ... -
poj 1835 宇航员
2011-05-03 17:00 849题目描述:http://poj.org/problem?id ... -
poj 2398 Toy Storage
2011-04-23 20:19 747题目描述:http://www.poj.org/proble ... -
poj 1654 Area 多边形面积
2011-04-23 20:10 940题目描述:http://poj.org/proble ... -
poj 2318 TOYS 点 直线 位置关系
2011-04-23 10:06 706题目描述:http://poj.org/problem?id= ... -
poj pku 1673 EXOCENTER OF A TRIANGLE 三角形 垂心
2011-04-09 16:41 579题目描述:http://poj.org/problem?id= ... -
pc 111303 uva 10195 The Knights Of The Round Table
2011-04-04 16:06 779题目描述:http://www.programming-cha ... -
pc 111302 uva 10180 Rope Crisis in Ropeland!
2011-04-03 20:46 868题目描述: http://www.programming-ch ... -
poj 1971 Parallelogram Counting 平行四边形个数
2011-04-03 10:05 1244题目描述:http://poj.org/problem?id= ...
相关推荐
《POJ2525-Text Formalization:深入解析TrieTree》 在计算机科学的世界里,算法和数据结构是解决问题的关键。今天我们要探讨的是一个名为"POJ2525-Text Formalization"的问题,它涉及到一种高效的数据结构——Trie...
【标题】"POJ2513-Colored Sticks【TrieTree+MergeSet+EulerPath】"涉及的是一道编程竞赛题目,主要考察参赛者的数据结构与算法应用能力,特别是Trie树(字典树)、并查集(MergeSet)以及欧拉路径(Euler Path)这...
poj 1909 Marbles on a tree.md
poj 1308 Is It A Tree_.md
【标题】"POJ1584-A Round Peg in a Ground Hole" 是一道来自北京大学在线判题系统POJ(Problem Set)的经典算法题目。这道题目主要涉及的是几何计算和位运算的应用,属于计算机科学中的基础算法问题。 【描述】...
【标题】"POJ2255-Tree Recovery" 是一个来自北京大学在线判题系统POJ(Problem Set of Peking University)的编程题目。这个题目主要涉及到数据结构和图论的知识,尤其是树的恢复问题。 【描述】"北大POJ2255-Tree...
【标题】"POJ1942-Paths on a Grid"是北京大学在线编程平台POJ上的一道经典算法题目,其主要目标是探索在网格上行走的路径问题。 【描述】该题目的描述中提到“解题报告+AC代码”,这暗示了解决此问题的关键在于...
【标题】"POJ1005-I Think I Need a Houseboat" 是一个编程竞赛题目,源自北京大学的在线评测系统POJ(Problem Set of Peking University)。这个题目旨在考验参赛者的算法设计和实现能力,主要涉及数据结构和动态...
【标题】"POJ2488-A Knight's Journey【骑士游历】" 【知识点解析】 本题是来自北京大学在线编程平台POJ的一道经典算法题——“骑士游历”。题目要求解决的是一个典型的图论问题,即在国际象棋棋盘上,骑士能否...
【标题】"POJ1691-Painting A Board 【拓扑+DFS】"是一个源自北京大学在线编程平台POJ的编程题目,它主要涉及到图论中的拓扑排序和深度优先搜索(DFS)算法。该题目的核心是解决一个与涂色相关的实际问题,通过运用...
poj 2201 Cartesian Tree.md
Give a tree with n vertices,each edge has a length(positive integer less than 1001). Define dist(u,v)=The min distance between node u and v. Give an integer k,for every pair (u,v) of vertices is ...
【标题】"POJ2031-Building a Space Station【Prim+计算几何】"是一道编程竞赛题目,源自北京大学的在线判题系统POJ(Problem Online Judge)。该题目结合了图论中的Prim算法与计算几何领域的知识,挑战参赛者的算法...
标题和描述中的“poj各种分类”主要指向的是在POJ(Peking University Online Judge)平台上,根据解题策略和算法类型对题目进行的分类。POJ作为一个知名的在线编程平台,提供了大量的算法练习题,适合从初学者到...
PKU Online Judge上面很全面的动态规划试题总结。动态规划是ACM考点中最重要的一大类算法之一,对于工作人员来说,动态规划也是实际开发中...这是POJ上面很多DP题目的总结与深刻分析。利于算法学习,学长给的,在此分享
【标题】"POJ1004 - Financial Management" 是一个来自北京大学在线判题系统POJ(Problem Set of Peking University)的编程题目。这个题目主要涉及到计算机科学中的算法设计和实现,特别是与财务管理和计算相关的...
* 1308 Is It A Tree?:这是一个构造题目,要求学习者编写一个程序来判断是否是一个树。 * 1316 Self Numbers:这是一个构造题目,要求学习者编写一个程序来计算自我数字。 特殊问题 特殊问题是POJ题目中的一种...
* 图的深度优先遍历和广度优先遍历:图的深度优先遍历和广度优先遍历是指遍历图的两种方式,如 poj1860、poj3259、poj1062、poj2253、poj1125、poj2240。 * 最短路径算法:最短路径算法是指计算图中两点之间的最短...
【标题】"POJ.rar_poj java_poj1048" 涉及的知识点主要围绕编程竞赛中的“约瑟夫环”问题,这里是一个加强版,使用Java语言进行解决。 【描述】"POJ1048,加强版的约瑟夫问题 难度中等" 提示我们,这个问题是编程...
标题“POJ3414-Pots”是一个编程竞赛题目,源自北京大学的在线判题系统POJ(Problem Online Judge)。这个题目主要考察的是算法设计和实现能力,通常涉及计算机科学中的数据结构和算法知识。 解题报告是参赛者在...