曼哈頓距離:兩點在南北方向上的距離加上在東西方向上的距離,即d(i,j)=|xi-xj|+|yi-yj|。對於乙個具有正南正北、正東正西方向規則布局的城鎮街道,從一點到達另一點的距離正是在南北方向上旅行的距離加上在東西方向上旅行的距離。
思路:因為只能東西和南北方向走,所以先把南北(x)和東西(y)方向的座標分開,分別求它們的最值,然後相加即可。分析可以得知,郵局的所建點必須在居民點上,要不然所得的值總會比最小值多出一部分來。知道這個然後讓我們來分析:假設在座標軸x上有n個點,是從1到n,我們所求的目標點在x上,先求點1和n到x的距離只和,很顯然x點在1到n之間,然後再求2和n-1到x的距離之和,很顯然x點在2和n-1之間,如此重複下去,x的範圍不斷減小,最後成為中位點。
#include #include #include #include #include #include #include #include #include #include #include using namespace std;
typedef long long ll;
const int inf=0x3f3f3f3f;
const double pi= acos(-1.0);
const double esp=1e-6;
const int maxn=21010;
int main() {
int n,m,i,j;
int sum;
int x[30],y[30];
scanf("%d",&n);
while(n--) {
memset(x,0,sizeof(x));
memset(y,0,sizeof(y));
sum=0;
scanf("%d",&m);
for(i=0; i
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個街道。現在要建乙個郵局,使...