街區最短路徑問題

2021-09-30 11:39:23 字數 843 閱讀 5079

描述

乙個街區有很多住戶,街區的街道只能為東西、南北兩種方向。

住戶只可以沿著街道行走。

各個街道之間的間隔相等。

用(x,y)來表示住戶坐在的街區。

例如(4,20),表示使用者在東西方向第4個街道,南北方向第20個街道。

現在要建乙個郵局,使得各個住戶到郵局的距離之和最少。

求現在這個郵局應該建在那個地方使得所有住戶距離之和最小; 輸入

第一行乙個整數n<20,表示有n組測試資料,下面是n組資料;

每組第一行乙個整數m<20,表示本組有m個住戶,下面的m行每行有兩個整數0

輸出每組資料輸出到郵局最小的距離和,回車結束;

解題思路:

假設郵局座標(a,b)     住戶與郵局的距離 就是曼哈頓距離  |x-a|+|y-b|

總的就變成  各住戶的x座標 郵局a座標  |x1-a|+|x2-a|.... +|y1-b|+|y2-b|...+|yn-b|

問題就變分解成 x、y標軸   x1 、x2.。xn 與a差的總和最小值

a  假設  位於 xm

|x1-a|+|x2-a|+..+|xn-a| = (a-x1)+(a-x2)+..+(a-xm)+..+(xn-a)

a 為x1、x2。。xn  最中間數x 時候 總和最小(推理證明後補充)

#include #include #include using namespace std;

int main()

sort(xbuf.begin(),xbuf.end());

sort(ybuf.begin(),ybuf.end());

long sum=0;

for(int i=0;i

街區最短路徑問題

描述 乙個街區有很多住戶,街區的街道只能為東西 南北兩種方向。住戶只可以沿著街道行走。各個街道之間的間隔相等。用 x,y 來表示住戶坐在的街區。例如 4,20 表示使用者在東西方向第4個街道,南北方向第20個街道。現在要建乙個郵局,使得各個住戶到郵局的距離之和最少。求現在這個郵局應該建在那個地方使得...

街區最短路徑問題

描述 乙個街區有很多住戶,街區的街道只能為東西 南北兩種方向。住戶只可以沿著街道行走。各個街道之間的間隔相等。用 x,y 來表示住戶坐在的街區。例如 4,20 表示使用者在東西方向第4個街道,南北方向第20個街道。現在要建乙個郵局,使得各個住戶到郵局的距離之和最少。求現在這個郵局應該建在那個地方使得...

街區最短路徑問題

描述 乙個街區有很多住戶,街區的街道只能為東西 南北兩種方向。住戶只可以沿著街道行走。各個街道之間的間隔相等。用 x,y 來表示住戶坐在的街區。例如 4,20 表示使用者在東西方向第4個街道,南北方向第20個街道。現在要建乙個郵局,使得各個住戶到郵局的距離之和最少。求現在這個郵局應該建在那個地方使得...