• Hdu-2112 HDU Today (单源多点最短路——Dijsktra算法)


    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2112

    题目大意:给你N个公交车站,起点,终点,各站之间的距离,求起点到终点之间的最短距离。(起点终点相同距离为0)不能到达输出-1.

    说真的开始看到这个题,我想利用数字标记那些地名,再利用dijsktra算法,但不知道如何用代码实现,后来在网上看博客

    才知道有这样一个头文件#include<map>,map 映射,可以有这种效果,那么这题也就so easy!了,

    我的AC代码

    #include<iostream>
    #include<map>
    #include<cstdio>
    #include<cstring>
    #define Max 0x3f3f3f3f
    using namespace std;
    int dis[155],visit[155],maze[155][155];

    int main(void)
    {
    int num,n,i,j,k,t,l,dist;
    char begin[30],end[30];
    char a[30],b[30];
    map<string,int> station;
    while(scanf("%d",&n)==1&&n!=-1)
    {
    memset(visit,0,sizeof(visit));
    memset(maze,Max,sizeof(maze));
    station.clear();
    l=0;
    scanf("%s%s",begin,end);
    if(strcmp(begin,end)==0)
    l=1;
    station[begin]=1;
    station[end]=2;
    num=2;
    for(i=0;i<n;i++)
    {
    scanf("%s%s%d",a,b,&dist);
    if(!station[a])
    station[a]=++num;
    if(!station[b])
    station[b]=++num;
    maze[station[a]][station[b]]=maze[station[b]][station[a]]=dist;
    }
    if(l)
    {
    printf("0 ");
    continue;
    }
    dis[1]=0;
    for(i=2;i<=num;i++)
    {
    dis[i]=maze[1][i];
    }
    for(i=1;i<=num;i++)
    {
    t=Max;
    for(j=1;j<=num;j++)
    {
    if(!visit[j]&&t>dis[j])
    {
    k=j;
    t=dis[j];
    }
    }
    if(t==Max) break;
    visit[k]=1;
    for(j=1;j<=num;j++)
    {
    if(!visit[j]&&dis[j]>dis[k]+maze[k][j])
    dis[j]=dis[k]+maze[k][j];
    }
    }
    if(dis[2]==Max)
    printf("-1 ");
    else
    printf("%d ",dis[2]);
    }
    return 0;
    }

  • 相关阅读:
    第8章 传输层(4)_可靠传输
    第8章 传输层(3)_TCP协议
    第8章 传输层(2)_UDP协议
    第8章 传输层(1)_TCP/UDP协议的应用场景
    【Sqlsever系列】日期和时间
    【SqlServer系列】聚合函数
    【Sqlserver系列】CAST和CONVERT
    【SqlServer系列】AS的用法
    【博客目录】SqlServer篇
    【SqlServer系列】集合运算
  • 原文地址:https://www.cnblogs.com/liudehao/p/3912854.html
Copyright © 2020-2023  润新知