• Subway---poj2502(最短路)


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

    人走路的速度是10km/h,地铁的速度是40km/h题目给出一个起点,一个终点,以及几条地铁线路运行的站点。题目给的点的做坐标单位是m;答案输出从起点到终点的最短时间(分钟数)。
     
    10km/h= 10000/60 m/min -----6/1000 min/m;
    40km/h= 40000/60 m/min------3/2000 min/m;
     
    所有点之间都可以步行到达,每条地铁的相邻两站可以相互到达,其他的都不可到达;
    求起点到终点的最短路即可;
    #include <iostream>
    #include <stdio.h>
    #include <math.h>
    #include <string.h>
    #include <queue>
    #include <stack>
    #include <algorithm>
    #include <map>
    #include <string>
    typedef long long LL;
    #define INF 1e30
    #define met(a, b) memset(a, b, sizeof(a))
    #define N 515
    
    using namespace std;
    
    struct node
    {
        double x,y;
    }a[N];
    
    double G[N][N], dist[N];
    int vis[N], cnt;
    
    double Dij(int s)
    {
        met(vis, 0);
        for(int i=1; i<=cnt; i++)
            dist[i] = INF;
        dist[s] = 0;
        for(int i=1; i<cnt; i++)
        {
            double Min = INF; int Index = -1;
            for(int j=1; j<cnt; j++)
            {
                if(!vis[j] && Min>dist[j])
                {
                    Min = dist[j];
                    Index = j;
                }
            }
            if(Index == -1)break;
            vis[Index] = 1;
            for(int j=1; j<cnt; j++)
            {
                if(!vis[j] && dist[j]>dist[Index]+G[Index][j])
                {
                    dist[j] = dist[Index]+G[Index][j];
                }
            }
        }
        return dist[2];
    }
    
    int main()
    {
        while(scanf("%lf %lf %lf %lf", &a[1].x, &a[1].y, &a[2].x, &a[2].y)!=EOF)
        {
            for(int i=1; i<=300; i++)
            {
                for(int j=1; j<=300; j++)
                    G[i][j] = INF;
                G[i][i] = 0;
            }
            cnt = 3; int pre = -1; double x, y;
            while(scanf("%lf %lf", &x, &y) != EOF)
            {
                if(x == -1 && y == -1)
                {
                    pre = -1;
                    continue;
                }
                a[cnt].x = x, a[cnt].y = y;
                if(pre!=-1)
                {
                    double d = sqrt((a[pre].x-x)*(a[pre].x-x)+(a[pre].y-y)*(a[pre].y-y));
                    G[pre][cnt] = G[cnt][pre] = min(G[cnt][pre], d*3.0/2000);
                }
                pre = cnt++;
            }
    
            for(int i=1; i<cnt; i++)
            {
                for(int j=1; j<cnt; j++)
                {
                    double d = sqrt((a[i].x-a[j].x)*(a[i].x-a[j].x)+(a[i].y-a[j].y)*(a[i].y-a[j].y));
                    G[i][j] = G[j][i] = min(G[i][j],d*6.0/1000);
                }
            }
    
            double ans = Dij(1);
            printf("%.0f
    ", ans);
        }
        return 0;
    }
    View Code
  • 相关阅读:
    django入门系列 -表单视图
    django学习 -模型层初体验
    python 元组与list的区别
    解决容器内部无法访问宿主机端口的问题
    记一次pyccharm Terminal django 执行 python migrate 无法生成新的数据表的报错过程
    ES学习之ES语法入门
    docker seleniumgrid 问题解决
    selenium的Grid方式遇到 1 requests waiting for a slot to be free. 问题
    js写的ajax
    ajax jQ写的上传进度条
  • 原文地址:https://www.cnblogs.com/zhengguiping--9876/p/5815516.html
Copyright © 2020-2023  润新知