街區最短路徑問題

2022-07-11 08:15:13 字數 1151 閱讀 7055

問題描述:

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

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

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

用(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問題分析:這個問題初看可以用暴力方法求解,題中所要求的的資料量不是很大,因此自己寫的時候也是直接求解具體思路就是:用所有x,y的可能值帶入所有給定的點中求出距離distance,對於每組(x,y)值求出的distance不同,從中找出乙個mindistance即可。

具體**如下

#include#include

#include

using

namespace

std;

intmain()

for(int i=1;i<100;i++)  

if(distance}

}cout

}

return0;

}

這個方法其實不是很好,可以看出**中用了乙個三層迴圈時間複雜度為o(n3),如果題目資料量稍微改大一點,這個演算法的效率就會很低。看了答案給的最優演算法,一種不同的思路,效率很高,很讚!

#include#include

using

namespace

std;

int x[30],y[30

],n,m,i;;

intmain()

return0;

}

這個演算法思路有一定的技巧,時間複雜度為o(n2)。值得推薦!好的演算法確實需要我們深入思考!!!

街區最短路徑問題

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

街區最短路徑問題

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

街區最短路徑問題

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