参考博客:https://www.cnblogs.com/ECJTUACM-873284962/p/8468780.html
具体思路:
- 先假设任意一点为要找的点,计算离所有线段的距离和。
- 从当前点向其他方向走unit_dist个单位(可以上下左右,也可以添加更多其他方向),再计算距离和,与上次比较,若更小则更新答案。
- 若向所有方向走完都没有发现更优解,使unit_dist变为原来的decrease_rate倍后再次尝试。
- 当unit_dist小于一个限定值eps时,程序结束。
上面的unit_dist,decrease_rate(<1),eps都是自己设定的。
扩展:
可以扩展到三维空间,给定三维空间的n点,找出一个半径最小的球把这些点全部包围住。
类似上述步骤,移动时的加上前后两个方向即可。
相关题目:
http://poj.org/problem?id=2420
http://poj.org/problem?id=2069