[kuangbin带你飞]专题四 最短路练习 B POJ 2253

来源:互联网 发布:linux 安装服务 编辑:程序博客网 时间:2024/06/02 08:31

题目地址:https://vjudge.net/contest/66569#problem/B

思路:模板题,稍微修改一下松弛条件即可

AC代码:

#include<iostream>#include<cstdio>#include<cstring>#include<queue>#include<vector>#include<cmath>using namespace std;const int maxn=200+5;vector<pair<int,double> >E[maxn];struct point{    int x,y;}p[maxn];int n;double d[maxn];double cal(int i,int j){    return 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));}int main(){    int num=1;    while(scanf("%d",&n) && n)    {        for(int i=0;i<=n;i++)        {             d[i]=1e9;             E[i].clear();             p[i].x=0,p[i].y=0;        }        for(int i=1;i<=n;i++)        {        scanf("%d%d",&p[i].x,&p[i].y);        for(int j=i-1;j>=1;j--)        {            double temp=cal(i,j);            E[i].push_back(make_pair(j,temp));            E[j].push_back(make_pair(i,temp));        }        }        int s=1,e=2;        d[s]=0;        priority_queue<pair<double,int> >q;        q.push(make_pair(-d[s],s));        while(!q.empty())        {            int now=q.top().second;            q.pop();            for(int i=0;i<E[now].size();i++)            {                int v=E[now][i].first;                if(d[v]>E[now][i].second && d[v]>d[now])                {                    d[v]=max(E[now][i].second,d[now]);                    q.push(make_pair(-d[v],v));                }            }        }        printf("Scenario #%d\n",num++);        printf("Frog Distance = %.3f\n\n",d[2]);    }}


0 0
原创粉丝点击