題目傳送門:
給出從 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找...