日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

【POJ - 2253】Frogger(floyd,或 部分瓶颈生成树的最大边)

發(fā)布時(shí)間:2023/12/10 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【POJ - 2253】Frogger(floyd,或 部分瓶颈生成树的最大边) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

題干:

湖中有n塊石頭,編號(hào)從1到n,有兩只青蛙,Bob在1號(hào)石頭上,Alice在2號(hào)石頭上,Bob想去看望Alice,但由于水很臟,他想避免游泳,于是跳著去找她。但是Alice的石頭超出了他的跳躍范圍。因此,Bob使用其他石頭作為中間站,通過(guò)一系列的小跳躍到達(dá)她。兩塊石頭之間的青蛙距離被定義為兩塊石頭之間所有可能路徑上的最小必要跳躍距離,某條路徑的必要跳躍距離即這條路徑中單次跳躍的最遠(yuǎn)跳躍距離。你的工作是計(jì)算Alice和Bob石頭之間的青蛙距離。

Input

多實(shí)例輸入?
先輸入一個(gè)整數(shù)n表示石頭數(shù)量,當(dāng)n等于0時(shí)結(jié)束。
接下來(lái)2-n+1行依次給出編號(hào)為1到n的石頭的坐標(biāo)xi , yi。
2 <= n <= 200?
0 <= xi , yi <= 1000

Output

先輸出"Scenario #x", x代表樣例序號(hào)。
接下來(lái)一行輸出"Frog Distance = y", y代表你得到的答案。?
每個(gè)樣例后輸出一個(gè)空行。
(ps:wa有可能是精度問(wèn)題,g++不對(duì)可以用c++嘗試,都不對(duì)就是代碼問(wèn)題)

Sample Input

2 0 0 3 43 17 4 19 4 18 50

Sample Output

Scenario #1 Frog Distance = 5.000Scenario #2 Frog Distance = 1.414

題目大意:

1為起點(diǎn),2為終點(diǎn),那么1~2的所有路徑,每條路徑的最大邊構(gòu)成一個(gè)邊集E,讓你求E中的最小值。

解題報(bào)告:

? 這題可以直接跑MST,然后當(dāng)1~2已經(jīng)連通的時(shí)候就break就行了,這時(shí)候得到的就是答案。

? 法二跑個(gè)floyd稍微修改一下也行。

AC代碼:

#include<cstdio> #include<iostream> #include<algorithm> #include<queue> #include<map> #include<vector> #include<set> #include<string> #include<cmath> #include<cstring> #define F first #define S second #define ll long long #define pb push_back #define pm make_pair using namespace std; typedef pair<int,int> PII; const int MAX = 2e2 + 5; double dis[MAX][MAX]; int x[MAX],y[MAX],n; void floyd() {for(int k = 1; k<=n; k++) {for(int i = 1; i<=n; i++) {for(int j = 1; j<=n; j++) {dis[i][j] = min(dis[i][j],max(dis[i][k],dis[k][j]));}}} } int main() {int iCase=0;while(~scanf("%d",&n) && n) {for(int i = 1; i<=n; i++)for(int j = 1; j<=n; j++) dis[i][j] = 999999999;for(int i = 1; i<=n; i++) {scanf("%d%d",x+i,y+i);for(int j = 1; j<i; j++) {dis[i][j] = dis[j][i] = sqrt((x[i]-x[j])*(x[i]-x[j]) + (y[i]-y[j])*(y[i]-y[j]));}} floyd();printf("Scenario #%d\n",++iCase);printf("Frog Distance = %.3f\n\n",dis[1][2]); }return 0 ; }

?

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的【POJ - 2253】Frogger(floyd,或 部分瓶颈生成树的最大边)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。