P1744 採購特價商品(SPFA求最短路徑模板)

2021-10-16 09:12:38 字數 1500 閱讀 3999

題目傳送門:

給出從 1

11 ~ n

nn 編號的 n

nn 個點,以及它們的座標 (xi

,yi)

(x_i,\ y_i)

(xi​,y

i​),然後給出他們之間相連的 m

mm 條邊,最後給出起點的編號 s

ss 和終點的編號 t

tt,求它們之間的最短距離。

利用兩點間距離的距離公式 (x1

−x2)

2+(y

1−y2

)2

\sqrt

(x1​−x

2​)2

+(y1

​−y2

​)2​

,可以得到每一條邊的權值,接下就是套最短路徑的模板了。

由於 spfa 能處理負權邊的問題,而且我還不怎麼會,這題就套用了 spfa 的模板。它的處理流程如下:

注意:spfa 會被經過特殊構造的資料卡掉,所以如果邊權為正的時候,盡量選用 dijkstra 演算法求最短路徑。

#include

#include

#include

#include

using

namespace std;

const

int n =

1e2+10;

const

int m =

2e3+10;

struct edge e[m]

;int n, m, s, t;

int head[n]

, cnt;

int x[n]

, y[n]

;double dis[n]

;bool vis[n]

;// 兩點間距離公式

double

getdistance

(int x1,

int y1,

int x2,

int y2)

// 鏈式向前星

intaddedge

(int u,

int v,

double w)

// spfa 模板

intspfa

(int s)

queue<

int> q;

q.push

(s);

vis[s]

=true

; dis[s]=0

;while

(!q.

empty()

)}}}

}int

main()

cin >> m;

for(

int i =

1; i <= m; i++

) cin >> s >> t;

spfa

(s);

printf

("%.2f\n"

, dis[t]);

return0;

}

洛谷 P1744 採購特價商品

洛谷 p1744 採購 商品 愛與愁的故事第三彈 shopping 第一章。中山路店山店海,成了購物狂愛與愁大神的 不歸之路 中山路上有n n 100 家店,每家店的座標均在 10000 10000之間。其中的m家店之間有通路。若有通路,則表示可以從一家店走到另一家店,通路的距離為兩點間的直線距離。...

洛谷 P1744 採購特價商品

愛與愁的故事第三彈 shopping 第一章。中山路店山店海,成了購物狂愛與愁大神的 不歸之路 中山路上有n n 100 家店,每家店的座標均在 10000 10000之間。其中的m家店之間有通路。若有通路,則表示可以從一家店走到另一家店,通路的距離為兩點間的直線距離。現在愛與愁大神要找出從一家店到...

luogu P1744 採購特價商品

先來看題,我們會發現如果把他所給的變數都輸入,那麼會發現用floyd的解法,輸入佔了main函式的一半長度。題目分為兩步走 1.根據題意,我們可知是讓我們算兩點間直線距離,那我們就可以順理成章的去用我們學過的 兩點間距離公式!2.就要看floyd的了,我們知道了兩點間的距離,那麼我們就用floyd找...