nanyangoj 7 街區最短路徑問題

2021-07-09 22:45:51 字數 930 閱讀 7542

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

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

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

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

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

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

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

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

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

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

樣例輸入23

1 12 1

1 25

2 9

5 20

11 9

1 11 20

樣例輸出244

思路:給你 n 個數 a[1]、a[2]、……、a[n]; 求 min(∑|a[i]-x|) 

首先 把這 n 數進行排序 ans = ∑ (a[n-i]-a[i]) 1<=i<=n/2;  其實就是在乙個座標軸上有 n 個點 求乙個點到所以點的最短距離和 ,由於任意兩點 x1 、x2,要使

的距離和最小 則  x 必須在x1  x2 之間就行了,所以 n 個頂點排完序後 只要把 x 放在這 n 個數之間就行了

#include #include using namespace std;

int x[30],y[30];

int main()

sort(x+1,x+n+1);

sort(y+1,y+n+1);

int sum=0;

for(int i=1;i<=n/2;++i)

printf("%d\n",sum);

} return 0;

}

南陽 7 街區最短路徑問題

解題思路 題意很明確,關鍵就是求郵局的位置,由於所有住戶座標到該點的距離和最短,其實就是縱橫座標 中位數。即先排序,然後計算中位數的序號。接著就容易求出各個住戶到郵局的距離之和即可 演算法 n 個數 a 1 a 2 a n 求 min a i x 首先 把這 n 數進行排序 ans a n i a ...

nyoj 7 街區最短路徑

include include using namespace std int cmp int a,int b if m 2 0 sum1 sum1 midx sort y,y m,cmp midy y m 2 for i 0 i m i if m 2 0 sum2 sum2 midy printf...

題目7 街區最短路徑問題

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