zoukankan      html  css  js  c++  java
  • 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;
    }

  • 相关阅读:
    刷脸背后:人脸检测人脸识别人脸检索_张重生资料整理
    webpack工具
    js精度缺失和最大安全整数
    在线文档预览(干货篇)
    讨论js比较两个数组(对象)是否相等的范围
    js不同数据类型中==与===的对比
    js中this的指向
    前后端数据类型
    js网页节点操作
    圆角渐变边框实现
  • 原文地址:https://www.cnblogs.com/liudehao/p/3912854.html
Copyright © 2011-2022 走看看