街區最短路徑問題
時間限制:3000 ms | 記憶體限制:65535 kb
難度:4
描述
乙個街區有很多住戶,街區的街道只能為東西、南北兩種方向。
住戶只可以沿著街道行走。
各個街道之間的間隔相等。
用(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
由於測試資料比較弱,剛開始直接暴力也能過。
#include
#include
#include
#include
#include
using
namespace
std;
typedef
struct node
point;
const
int inf = 0x3f3f3f3f;
const
int maxn=105;
int m;
vector
ve;void init()
; ve.push_back(temp);
}}int solve()
ans=min(ans,sum);}}
return ans;
}int main()
法二:數學:在一維的數軸上,一點x到數軸上多點的距離和最小 = a[max]-a[0]+a[max-1]-a[0+1]+….直到max-n<=0+n;
/*
此題為數學類問題,目的是為了找乙個點,使這個點到每條邊的距離最短,
本題中,可以用乙個簡單地思路,分別把座標x,y,分開,
那麼這道題就簡化為:在給定的m個點中,求每個點到x的距離的和的最小值,
即:min,故本題的結果應該是:距離=min+min。
為了是問題更簡化,可以先將x座標y座標分別按公升序排序,然後用最後乙個數減去第乙個,
倒數第二個減去正數第二個......以此類推。(這樣做的原因是,想要找出一點,
使該點到兩個端點的距離的和最小,則這個點必落在兩個端點之間。)
*/#include
#include
#include
using
namespace
std;
int x[20],y[20];
int main()
NYOJ 7 街區最短路徑問題
描述 乙個街區有很多住戶,街區的街道只能為東西 南北兩種方向。住戶只可以沿著街道行走。各個街道之間的間隔相等。用 x,y 來表示住戶坐在的街區。例如 4,20 表示使用者在東西方向第4個街道,南北方向第20個街道。現在要建乙個郵局,使得各個住戶到郵局的距離之和最少。求現在這個郵局應該建在那個地方使得...
NYOJ 7 街區最短路徑問題
include include includeint a 30 b 30 c 110 110 c1 110 110 e 30 f 30 a陣列存的是橫座標 b陣列存的是縱座標 因為要對a和b陣列排序 所以有新增兩個陣列e和f儲存未排序時的a與b陣列 c陣列是乙個矩陣 c1陣列是來記錄該位置是否被訪問...
NYOJ 7 街區最短路徑問題
時間限制 3000 ms 記憶體限制 65535 kb 難度 4 描述 乙個街區有很多住戶,街區的街道只能為東西 南北兩種方向。住戶只可以沿著街道行走。各個街道之間的間隔相等。用 x,y 來表示住戶坐在的街區。例如 4,20 表示使用者在東西方向第4個街道,南北方向第20個街道。現在要建乙個郵局,使...