poj 2253 Frogger

来源:互联网 发布:朗读语文课文软件 编辑:程序博客网 时间:2024/05/17 08:05
#include<cstdio>#include<cstring>#include<math.h>#include<iostream>using namespace std;const int MAX=9999999;/*开始以为看懂题了,用dijkstra算法做的,GG看了别人的解释发现求的是最大的跳的距离,以后读题要慢,要仔细,英语战无渣*/int n;float map[210][2], dis[210][210];int main(){    int cases=1;    memset(dis,0,sizeof(dis));   while(~scanf("%d",&n)&&n)   {       for(int i=1;i<=n;i++)       {           scanf("%f%f",&map[i][0],&map[i][1]);       }       for(int i=1;i<n;i++)       for (int j=i+1;j<=n;j++){        dis[i][j]=dis[j][i]=sqrt(pow(map[i][0]-map[j][0],2)+pow(map[i][1]-map[j][1],2));       }   for(int k=1;k<=n;k++)  for(int i=1;i<=n;i++)    for(int j=1;j<=n;j++)  {        if(dis[i][k]<dis[i][j] && dis[k][j]<dis[i][j])    //当边ik,kj的权值都小于ij时,则走i->k->j路线,否则走i->j路线                        if(dis[i][k]<dis[k][j])               //当走i->k->j路线时,选择max{ik,kj},只有选择最大跳才能保证连通                            dis[i][j]=dis[j][i]=dis[k][j];                        else                            dis[i][j]=dis[j][i]=dis[i][k];  }      cout<<"Scenario #"<<cases++<<endl;       printf("Frog Distance = %.3f\n\n",dis[1][2]);   }    return 0;}

0 0
原创粉丝点击