NSWOJ 1101 街區最短路徑問題

2021-08-15 04:24:50 字數 1098 閱讀 8734

題目描述

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

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

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

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

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

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

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

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

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

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

樣例輸入

2

31 1

2 11 2

52 9

5 20

11 9

1 11 20

樣例輸出

2

44

其實可以看成走方格,怎樣走路徑和最短,只能上下和左右走,可以分步計算上下和左右走的路徑和,同時利用中位線定理可知,中點為起始點,即sum=

min(∑|x[i]-x|)+min(∑|y[i]-y|),x,y為排序後的座標.

可以簡化為,

假設可以先假設有5個數,那麼sum=x[2]-x[0]+x[2]-x[1]+x[3]-x[2]+x[4]-x[2]=x[3]-x[1]+x[4]-x[0]

我們可以推導一下得到:

for(i=0;i

具體**的實現如下:

#include#include#include#includeusing namespace std;

int t,x[100],y[100],sum,m,n;

int main()

sum = 0 ;

sort(x, x + m); //對x座標進行排序

sort(y, y + m); // 對y座標進行排序

for(int i = 0 ; i < m/2 ; i ++)

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

}return 0 ;

}

1101 街區最短路徑問題

題目 nswoj 1101 街區最短路徑問題 時間限制 3秒 記憶體限制 128兆 題目描述 乙個街區有很多住戶,街區的街道只能為東西 南北兩種方向。住戶只可以沿著街道行走。各個街道之間的間隔相等。用 x,y 來表示住戶坐在的街區。例如 4,20 表示使用者在東西方向第4個街道,南北方向第20個街道...

街區最短路徑

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

街區最短路徑問題

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