C语言中医院的建立问题。在哪里建最合适。

ziqing_deshi 2009-10-14 09:42:26
在一个城市里,n个家庭散乱地分布在城市中。用x坐标表示东西向,用y坐标表示南北向。各家庭的位置可以由坐标(x,y)表示。其中任意2点(x1,y1)和(x2,y2)之间的距离可以用数值|x1-x2|+|y1-y2|度量。大家希望在城市中选择建立医院的最佳位置,使n个家庭到医院的距离总和最小,输出最小的距离。
输入示例 输出示例
6 25
1 2
2 2
-1 3
-2 -2
0 3
5 -6
...全文
229 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
zechaoxu 2009-11-04
  • 打赏
  • 举报
回复
学习学习
cphj 2009-10-14
  • 打赏
  • 举报
回复
应该就是求这n个点的重心
morilasi 2009-10-14
  • 打赏
  • 举报
回复
貌似算法导论 中位数 那一章有讲这个问题?
楼主可以翻一下
whg01 2009-10-14
  • 打赏
  • 举报
回复
先获取x,y的最大和最小值Xmin,Xmax, Ymin, Ymax。
然后让i从Xmin到Xmax变化,逐个计算相应的x方向的距离和。找到最小的。
然后再计算y方向。
这样就得到了坐标。
复杂度 O(n*max(|Xmin-Xmax|,|Ymin-Ymax|))
V68V6 2009-10-14
  • 打赏
  • 举报
回复
考虑DS中的多源点最短路径算法
zhkjoy 2009-10-14
  • 打赏
  • 举报
回复
先在距离最远的两个家庭中间线上试,找最小距离点,然后在这个点附近找
十八道胡同 2009-10-14
  • 打赏
  • 举报
回复
最简单的思路,通过试每个点得出答案,
不过应该有更好的办法
diablox0147 2009-10-14
  • 打赏
  • 举报
回复
如果实际生活中还应该考虑到交通和人口流量.....
cphj 2009-10-14
  • 打赏
  • 举报
回复
楼上用数学解释

如果用物理可以这样解释:
假设n个点都有同样的质量,再放入1个额外的点,那么最后这个点就会受到之前n个点的引力作用,于是它最终会运动到某个平衡点,这个点就是之前n个点的重心

如何证明,重心到其他各点的距离和最小:
在重心上,它将感受不到任何引力作用,因为它到n个点的距离是最小的,如果不是这样,那么它就还有势能,势能将迫使它继续移动
zdeepblue 2009-10-14
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 cphj 的回复:]
应该就是求这n个点的重心
[/Quote]
正解

设D(i)是Hospital(hx,hy)到Home(xi,yi)的距离,即D(i) = |hx-xi| + |hy-yi|
Sum(D)=D(1)+D(2)+...+D(n),求min(Sum(D))时的Hospital
因为D永为正数,可以把问题看成D2(i)=(hx-xi)^2+(hy-yi)^2,求min(sum(D2))
Sum(D2) = D2(1)+...+D2(n)
=n*hx^2-2*hx*sum(xi)+sum(xi^2) +
n*hy^2-2*hy*sum(yi)+sum(yi^2)
所以当hx=sum(xi)/n, hy=sum(yi)/n时Sum(D2)最小,即Sum(D)最小。

所以Hospital是在所有点围成多边形的中心。

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧