poj 2502 Subway(dijkstra 最短路)

来源:互联网 发布:淘宝直通车选词2016 编辑:程序博客网 时间:2024/05/01 18:58

大概题意是学生上学可以坐地铁可以步行,只要走到地铁站就立马能上车做地铁...先给出学生的家和学校的坐标...然后下面都是以-1 -1结尾的一串二维坐标,代表一条地铁线,不同地铁线不能建边,只能与相邻地铁站建边...地铁速度和步行速度给出,问到学校的最短时间是多少..

以到达时间为边权建边...步行所有点可以建边,地铁的话一条地铁线有n个点只能建立n-1条边..相邻建边..然后计算一下家到学校的最短路即可...注意输出的时候要四舍五入...用%.0f输出就是四舍五入了...还有就是计算过程尽量都用double...刚刚样例一直是19..调试了半天才看出来哪里错了...就是类型没对...

#include<cstdio>#include<cstring>#include<cmath>#include<cstdlib>#include<queue>#include<algorithm>#include<iostream>using namespace std;#define M 1000009#define inf 1<<30int used[1000];double dis[1000],map[1000][1000];struct node{    int x,y;} s[1000];int n;double dijkstra(){    for(int i=1; i<=n; i++)        dis[i]=inf;    dis[1]=0;    memset(used,0,sizeof(used));    for(int i=1; i<n; i++)    {        double mini=inf;//此处注意不要写成int类型        int t=-1;        for(int j=1; j<=n; j++)        {            if(!used[j]&&dis[j]<mini)                mini=dis[t=j];        }        if(mini==inf)            break;        used[t]=1;        for(int j=1; j<=n; j++)        {            if(!used[j]&&dis[j]>mini+map[t][j])                dis[j]=mini+map[t][j];        }    }    return dis[2];}double getdis(node a,node b){    return  sqrt(0.0+(a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));}int main(){    double v1=10000.0/60;//步行速度转为分钟    double v2=40000.0/60;//地铁速度转为分钟    scanf("%d %d %d %d",&s[1].x,&s[1].y,&s[2].x,&s[2].y);    n=3;    int k=3;    int x,y;    for(int i=1; i<=400; i++)    {        for(int j=1; j<=i; j++)            map[i][j]=map[j][i]=i==j?0:inf;    }    while(scanf("%d %d",&x,&y)!=EOF)//地铁建边    {        if(x==-1&&y==-1)//一条地铁线搞定了..下一条开始...        {            k=n;            continue;        }        s[n].x=x;        s[n].y=y;        if(n!=k)//不是本地铁线的首个地铁站的话可以与相邻地铁站建边            map[n][n-1]=map[n-1][n]=min(map[n][n-1],getdis(s[n],s[n-1])/v2);        n++;    }    for(int i=1; i<=n; i++) //步行建边    {        for(int j=1; j<=n; j++)            map[i][j]=min(map[i][j],getdis(s[i],s[j])/v1);    }    double ans=dijkstra();    printf("%.0f\n",ans);    return 0;}


0 0
原创粉丝点击