poj2253-Frogger (最小生成树)

来源:互联网 发布:zara淘宝官方旗舰店 编辑:程序博客网 时间:2024/06/08 19:04

题目链接:  http://poj.org/problem?id=2253

题意:找到a到b的一条路径使得该路径的最大步长最小。prim算法,只是当树可以到达b点时结束。(之前做过的题目好久没练好生疏哭

#include<cstdio>#include<cmath>using namespace std;const int num=205;const int inf=0x7fffffff;int n;double map[num][num],dis[num],ans,vis[num];struct node{    int x,y;}data[num];double qdis(node a,node b){    double dx,dy;    dx=a.x-b.x;    dy=a.y-b.y;    return sqrt(dx*dx+dy*dy);}void prim(int st,int ed){    int i,j,temp,tm;    double tv;    ans=0;    for(i=0;i<n;i++)    {        vis[i]=0;        dis[i]=map[st][i];    }    vis[st]=1;    for(i=1;i<n;i++)    {        tv=inf;        for(j=0;j<n;j++)        {            if(vis[j]==0&&dis[j]<tv)            {                tv=dis[j];                tm=j;            }        }        vis[tm]=1;        if(tv>ans)            ans=tv;        if(tm==ed)            break;        for(j=0;j<n;j++)            if(vis[j]==0&&map[tm][j]<dis[j])                dis[j]=map[tm][j];    }}int main(){    int t=0,i,j;    double s;    freopen("in.txt","r",stdin);    while(scanf("%d",&n)!=EOF)    {        if(n==0)            break;        t++;        for(i=0;i<n;i++)        {            scanf("%d%d",&data[i].x,&data[i].y);            for(j=0;j<i;j++)            {                s=qdis(data[i],data[j]);                map[i][j]=map[j][i]=s;            }            map[i][i]=0;        }        prim(0,1);        printf("Scenario #%d\n",t);        printf("Frog Distance = %.3f\n\n",ans);    }    return 0;}



0 0