POJ 2253 Frogger(最短路Floyd)题解
生活随笔
收集整理的這篇文章主要介紹了
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)题解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 移动硬盘由于IO设备错误,无法运行此项请
- 下一篇: jackson 问题定位