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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

POJ 2253 Frogger(最短路Floyd)题解

發布時間:2025/4/14 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 POJ 2253 Frogger(最短路Floyd)题解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題意:想給你公青蛙位置,再給你母青蛙位置,然后給你剩余位置,問你怎么走,公青蛙全力跳的的最遠距離最小。

思路:這里不是求最短路徑,而是要你找一條路,青蛙走這條路時,對他跳遠要求最低。這個思想還是挺好遷移的,原來我們用mp[i][j]表示i到j最短路徑,那么我們現在用它表示i到j最大步伐,然后每次比較,只要最大步伐比他小,那么我們就走新的路。注意最后是mp[1][2],一直mp[1][n]沒改無限WA。

代碼;

#include<cstdio> #include<set> #include<cmath> #include<stack> #include<cstring> #include<algorithm> #define ll long long using namespace std; const int maxn = 200+5; const int INF = 0x3f3f3f3f; struct Node{double x,y; }node[maxn]; double mp[maxn][maxn]; //表示i->j的最大步伐 int Case = 1; void Floyd(int n){for(int k = 1;k <= n;k++){for(int i = 1;i <= n;i++){for(int j = 1;j <= n;j++){if(mp[i][j] > max(mp[i][k],mp[k][j])){ //這樣走最大步伐比較小mp[i][j] = mp[j][i]= max(mp[i][k],mp[k][j]);}}}}printf("Scenario #%d\nFrog Distance = %.3lf\n\n",Case++,mp[1][2]); } int main(){int n,m;while(~scanf("%d",&n) && n){for(int i = 1;i <= n;i++)scanf("%lf%lf",&node[i].x,&node[i].y);for(int i = 1;i <= n;i++){for(int j = i + 1;j <= n;j++){mp[i][j] = mp[j][i] = sqrt((node[i].x - node[j].x)*(node[i].x - node[j].x) +(node[i].y - node[j].y)*(node[i].y - node[j].y));}}Floyd(n);}return 0; }

?

轉載于:https://www.cnblogs.com/KirinSB/p/9408735.html

總結

以上是生活随笔為你收集整理的POJ 2253 Frogger(最短路Floyd)题解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。