zoukankan      html  css  js  c++  java
  • HDU 2544 最短路

    最短路

    Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 58833    Accepted Submission(s): 25887

    Problem Description

    在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt。但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以现在他们想要寻找最短的从商店到赛场的路线,你可以帮助他们吗?

    Input

    输入包括多组数据。每组数据第一行是两个整数N、M(N<=100,M<=10000),N表示成都的大街上有几个路口,标号为1的路口是商店所在地,标号为N的路口是赛场所在地,M则表示在成都有几条路。N=M=0表示输入结束。接下来M行,每行包括3个整数A,B,C(1<=A,B<=N,1<=C<=1000),表示在路口A与路口B之间有一条路,我们的工作人员需要C分钟的时间走过这条路。
    输入保证至少存在1条商店到赛场的路线。

    Output

    对于每组输入,输出一行,表示工作人员从商店走到赛场的最短时间

    Sample Input

    2 1

    1 2 3

    3 3

    1 2 5

    2 3 5

    3 1 2

    0 0

    Sample Output

    3

    2

    Source

    UESTC 6th Programming Contest Online

    Recommend

    lcy   |   We have carefully selected several similar problems for you:  2066 1217 2112 1142 1548 

     1 #include <cstdio>
     2 #include <iostream>
     3 #include <cstring>
     4 #include <queue>
     5 using namespace std;
     6 
     7 const int MAX_N=110;
     8 int n,m, head[MAX_N],tot,dis[MAX_N];
     9 queue<int>q;
    10 struct node{
    11     int from,to,value,next;
    12 }e[MAX_N*MAX_N*2];
    13 bool exist[MAX_N];
    14 void Add_Edge(int u,int v,int w){
    15     e[++tot].from=u;e[tot].to=v;e[tot].value=w;
    16     e[tot].next=head[u];head[u]=tot;
    17 }
    18 void prepare(){
    19     memset(head,0,sizeof(head));
    20     memset(dis,0x3f,sizeof(dis));
    21     tot=0;
    22     memset(exist,false,sizeof(exist));
    23     while(!q.empty())q.pop();
    24 }
    25 void SPFA(){
    26     exist[1]=true;q.push(1);dis[1]=0;
    27     while(!q.empty()){
    28         int p=q.front();q.pop();exist[p]=false;
    29         for(int i=head[p];i;i=e[i].next){
    30             int v=e[i].to,w=e[i].value;
    31             if(w+dis[p]<dis[v]){
    32                 dis[v]=dis[p]+w;
    33                 if(!exist[v]){
    34                     q.push(v);exist[v]=true;
    35                 }
    36             }
    37         }
    38     }
    39     printf("%d
    ",dis[n]);
    40 }
    41 int main()
    42 {
    43     while(scanf("%d%d",&n,&m)==2){
    44         if(n==0&&m==0)break;
    45         prepare();
    46         for(int i=1,u,v,w;i<=m;i++){
    47             scanf("%d%d%d",&u,&v,&w);
    48             Add_Edge(u,v,w);Add_Edge(v,u,w);
    49         }
    50         SPFA();
    51     }
    52     return 0;
    53 }
  • 相关阅读:
    pc端布局方式
    idea中Git操作
    原型和原型链
    BFC块级格式上下文
    开发环境和生产环境
    webpack-dev-server报错
    es6类的继承
    js文件上传
    es6 字符串和数字常用方法
    es6 set容器和map容器
  • 原文地址:https://www.cnblogs.com/suishiguang/p/6382140.html
Copyright © 2011-2022 走看看