一类最短距离问题
来源:互联网 发布:天龙八部 知乎 编辑:程序博客网 时间:2024/04/27 03:38
在一个纵横间距为1的网格地图上,有n个比赛选手,他们分别位于某个纵横交点(即x和y坐标都是1的整倍数),将参加一个循环赛(即任意两个选手之间都需要进行比赛),你是赛事的组织者,要结合选手的位置信息来设计一个最佳的比赛赛程,使得他们走的路程总和最少(注选手只能沿着网格线走,不能沿任何对角线穿越),选手一旦完成所有比赛后,可以任意选择行动或停在原地,不需要回到其原来位置。
比如:如果有选手A(0,0),B(0,2),C(2,0),D(1,1),E(2,2),则一个可能的最佳解为:A和B走到(0,1)比赛,C和E走到(2,1)比赛,然后ABCE都走到D处(1,1)比赛,进行剩余所有比赛,所有选手共走了8个单位的距离。
其实,题目示例本身带有一定的迷惑性,分析可知,如果让所有的比赛都在D处(1,1)进行,也能够得到同解,因为是循环赛,任意两个选手都需要碰面,早碰晚碰并没有关系,但是这个分析可以简化解题思路,即我们只需要找出这么一个点,使得所有选手到它的水平和垂直距离差之和最小。
第一想到的可能是重心点,即x=sum{x1,...,xn}/n, y=sum{y1,...yn}/n,改点坐标可能带小数,再测试该点周围的网格点取最小值,这个思路似乎也贴合示例题解,但是,取个任意的x坐标数组,假设为{1,2,3,9,10,100},重心x=20.83,它在10和100之间,但是换一个角度,如果将取值点前移一个小的delta,在它之前的m个点都缩进delta,在它之后的l各点则延伸delta,总共可以降低(l-m)*delta,扩展一点,如果左侧的点比右侧多,则继续向左移近对降低总距离有益,反正亦然(x坐标和y坐标都适用),所以重心点未必是最佳位置,合理的位置应该是有序坐标的中间点位置,如果数组个数为奇数,则取中间点;如果为偶数,则中间两个点任取一个都可以。
所以,比赛场次安排和比赛地点都是幌子,最后的解显得很简洁。
- 一类最短距离问题
- 邮箱问题【一类最短距离问题续】
- 素数最短距离问题
- 字符串最短距离问题
- 问题七十六: 两数组最短距离。
- Dijkstra算法求解最短距离问题
- 问题 A: 两数组最短距离
- 最短距离
- 最短距离
- 最短距离
- 最短距离
- [经典面试题][腾讯]选择原料工厂(最短距离问题)
- Constructing Minimum Roads(修建最短距离公路)问题
- ACM一类方程问题的求解[最短路建模] bzoj2118
- 两数组最短距离
- 两数组最短距离
- gis最短距离
- 素数最短距离算法
- STL基本知识vector
- 美国信息交换标准代码
- duck duck go VS Google
- VC ADO技术简介
- 无言的情怀
- 一类最短距离问题
- aspnetpager使用方法
- C#中MessageBox用法大全
- 班级30人留学或保送的背后
- 班级30人留学或保送的背后
- 解密Zynga:专注 流水线 数据控
- 收集的常用正则表达式
- Java关键字final、static使用总结
- DevExpress的GridControl如何实现打印和打印预览