POJ 2253 Frogger

来源:互联网 发布:mysql delete语句 编辑:程序博客网 时间:2024/06/05 07:43

题目链接:http://poj.org/problem?id=2253
题目大意:第一行开始位置的坐标,第二行终止位置的坐标,剩下的n-2行是水中石头的坐标,求从开始到终止每次选取最小的权值,在每点的最小权值中输出最大的
思路:简单的最短路的比较
具体代码:

#include<stdio.h>#include<string.h>#include<algorithm>#include<iostream>#include<math.h>using namespace std;const int Max=210;const int INF=0x3f3f3f3f;using namespace std;int n;double dis[Max][Max];struct node{    double x,y;} p[Max];//定义一个结构体来储存坐标x,yint main(){    int t=0;    while(scanf("%d",&n)&&n)    {        for(int i=0; i<n; i++)        {            for(int j=0; j<n; j++)            {                dis[i][j]=dis[j][i]=INF;            }        }//对dis初始化        t++;        for(int i=0; i<n; i++)        {            scanf("%lf%lf",&p[i].x,&p[i].y);        }        for(int i=0; i<n; i++)        {            for(int j=0; j<n; j++)            {                dis[i][j]=(double)sqrt((p[i].x-p[j].x)*(p[i].x-p[j].x)+(p[i].y-p[j].y)*(p[i].y-p[j].y));//dis[i][j]就是i点到j点的距离            }        }        for(int k=0; k<n; k++)        {            for(int i=0; i<n; i++)            {                for(int j=0; j<n; j++)                {                    if(dis[i][j]>max(dis[i][k],dis[k][j]))                    {                        dis[i][j]=max(dis[i][k],dis[k][j]);//每次都选出最大的边                    }                }            }        }//Floyd求最短路径        printf("Scenario #%d\n",t);        printf("Frog Distance = %.3f\n",dis[0][1]);//输出始点0到终点1的最短路径的最大边        printf("\n");//最后别忘了输出一行换行    }    return 0;}
0 0