zoukankan      html  css  js  c++  java
  • hdu 2112 HDU Today ( Dijkstra )

    题目:

    Problem Description
    经过锦囊相助,海东集团终于度过了危机,从此,HDU的发展就一直顺风顺水,到了2050年,集团已经相当规模了,据说进入了钱江肉丝经济开发区500强。这时候,XHD夫妇也退居了二线,并在风景秀美的诸暨市浬浦镇陶姚村买了个房子,开始安度晚年了。
    这样住了一段时间,徐总对当地的交通还是不太了解。有时很郁闷,想去一个地方又不知道应该乘什么公交车,在什么地方转车,在什么地方下车(其实徐总自己有车,却一定要与民同乐,这就是徐总的性格)。
    徐总经常会问蹩脚的英文问路:“Can you help me?”。看着他那迷茫而又无助的眼神,热心的你能帮帮他吗?
    请帮助他用最短的时间到达目的地(假设每一路公交车都只在起点站和终点站停,而且随时都会开)。
     
    Input
    输入数据有多组,每组的第一行是公交车的总数N(0<=N<=10000);
    第二行有徐总的所在地start,他的目的地end;
    接着有n行,每行有站名s,站名e,以及从s到e的时间整数t(0<t<100)(每个地名是一个长度不超过30的字符串)。
    note:一组数据中地名数不会超过150个。
    如果N==-1,表示输入结束。
     
    Output
    如果徐总能到达目的地,输出最短的时间;否则,输出“-1”。
     
    Sample Input
    6
    xiasha westlake
    xiasha station 60
    xiasha ShoppingCenterofHangZhou 30
    station westlake 20
    ShoppingCenterofHangZhou supermarket 10
    xiasha supermarket 50
    supermarket westlake 10
    -1
     
    Sample Output
    50

    注意 :

    1 。是否为有向(无向)边

    2 。起始点和终点相同时,答案为0 还是 无穷

    此题 为无向边,

          起始点和终点相同时答案为0。

    代码 : 

     1 #include<iostream>
     2 #include<string.h>
     3 #include<stdio.h>
     4 using namespace std;
     5 
     6 const int Max=9999999;
     7 struct   stu
     8 {
     9     char ss[35];
    10 
    11 }S[155];
    12 
    13 int x;
    14 
    15 int find( char *s){
    16     for( int i=1;i<x;i++){
    17         if(strcmp(s,S[i].ss)==0)
    18             return i;
    19     }
    20     strcpy( S[x].ss, s );
    21     return x++;
    22 }
    23 
    24 int main( ){
    25 
    26     int n,a,b,map[155][155],flag[155],dis[155],A,B,c;
    27     char s1[35],s2[35];
    28     while( cin >>n){
    29 
    30         if( n==-1) break;
    31         memset(map,-1,sizeof(map));
    32         memset(flag,0,sizeof(flag));
    33         x=1;
    34         scanf("%s %s",s1,s2);
    35         A=find(s1);
    36         B=find(s2);
    37         for( int i=1;i<=n;i++){
    38             scanf("%s %s %d",s1,s2,&c);
    39             a=find(s1);
    40             b=find(s2);
    41             map[a][b]=c;
    42             map[b][a]=c;
    43 
    44         }
    45             for( int i=1;i<x;i++)
    46                 for( int j=1;j<x;j++)
    47                     if(map[i][j]==-1)
    48                         map[i][j]=Max;
    49 
    50             for( int i=1;i<x;i++)
    51                 dis[i]=map[A][i];
    52             dis[A]=0;
    53             int Min,t,l;
    54             for( l=1;l<x;l++){
    55                 Min=Max;
    56                 t=0;
    57                 for( int i=1;i<x;i++)
    58                     if( !flag[i] &&dis[i]<Min)
    59                     {
    60                         Min=dis[i];
    61                         t=i;
    62                     }
    63                 if( t==0 )  break;
    64 
    65                 flag[t]=1;
    66 
    67                 for(int i=1;i<x;i++)
    68                     if(!flag[i])
    69                         if(dis[i]>dis[t]+map[t][i])
    70                             dis[i]=dis[t]+map[t][i];
    71 
    72 
    73         }
    74         if( dis[B]==Max ) cout <<"-1" <<endl;
    75             else  cout <<dis[B] <<endl;
    76     }
    77     return 0;
    78 }
    View Code
  • 相关阅读:
    RHEL6中LVM逻辑卷管理
    Linux配置iSCSI存储
    Linux中FTP服务器配置
    360浏览器兼容模式下IE内核版本
    Ocelot + Consul + Registrator 基于Docker 实现服务发现、服务自动注册
    电视接入系统页面、监控页面
    Registrator中文文档
    关于Skyline沿对象画boundingbox的探讨
    EntityFramework实体默认值遇到Oracle自增主键
    C# 6.0 11个新特性
  • 原文地址:https://www.cnblogs.com/lysr--tlp/p/rrrr.html
Copyright © 2011-2022 走看看