街区最短路径问题

题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=7

最直观的方法就是暴力求解。复杂度为O(I*J*N),其中I=[min(x),max(x)],J=[min(y),max(y)],N为住户数。

更进一步地分析,如果给定住户(x1,y1),(x2,y2)...(xn,yn),若邮局位于(x,y),则距离和即为D=(|x1-x|+|y1-y|)+(|x2-x|+|y2-y|)+...+(|x3-x|+|y3-y|),问题转化为求D的最小值。

不难看出将x和y方向的中位数作为邮局放置位置时D最大。

只需将输入序列分别按x,y进行两次排序,取中位数即可,因此复杂度为2*O(nlogn),即O(nlogn).

在此感谢drizzlecrj师兄解题报告中提供的思路。

原文地址:https://www.cnblogs.com/mdyang/p/2034070.html