POJ2253-Frogger

http://poj.org/problem?id=2253

也是红皮上的

#include<stdio.h>
#include<string.h>
#include<math.h>
#define INF 999999.000
#define N 202
float map[N][N],dis[N],min,max;
bool vis[N];
int n,p=0;
struct
{
    int x,y;
}stone[N];
void dijkstra()
{
    int i,j,k;
    memset(vis,0,sizeof(vis));
    for(i=1;i<=n;i++)
       dis[i]=map[1][i];
    dis[1]=0;
    vis[1]=1;
    for(i=1;i<=n;i++)
    {
        min=INF;
        for(j=1;j<=n;j++)
           if(!vis[j]&&dis[j]<min)
           {
                  min=dis[j];
                  k=j;
           }
        if(min==INF)
           break;
        vis[k]=1;
        for(j=1;j<=n;j++)
        {
            max=dis[k]>map[k][j]?dis[k]:map[k][j];
            if(dis[j]>max)
               dis[j]=max;
        }
    }
    printf("Scenario #%d\n",++p);
    printf("Frog Distance = %.3f\n\n",dis[2]);
}
int main(void)
{
    int i,j;
    double d;
    while(scanf("%d",&n)&&n)
    {
        for(i=1;i<=n;i++)
           for(j=1;j<=n;j++)
              map[i][j]=INF;
        for(i=1;i<=n;i++)
        {
            scanf("%d%d",&stone[i].x,&stone[i].y);
            for(j=1;j<i;j++)
            {
                d=sqrt((float)(stone[i].x-stone[j].x)*(stone[i].x-stone[j].x)+(stone[i].y-stone[j].y)*(stone[i].y-stone[j].y));
                if(map[i][j]>d)
                   map[i][j]=map[j][i]=d;
            }
        }
        dijkstra();
    }
    return 0;
}
posted @ 2012-08-30 18:29  Yogurt Shen  阅读(150)  评论(0编辑  收藏  举报