zoukankan      html  css  js  c++  java
  • HDU2544--最短路

    最短路
    Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 21480 Accepted Submission(s): 9168


    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

    此题被称为神级试用模板题,四种方法都可以。

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<iostream>
     4 #include<algorithm>
     5 #include<cmath>
     6 using namespace std;
     7 
     8 #define INF 9999999
     9 int edge[101][101];
    10 int dis[101];
    11 int vis[101];
    12 int n,m;
    13 
    14 int dijkstra(int u0)
    15 {
    16     int i,j,k;
    17     for(i=1;i<=n;i++)
    18     {
    19         dis[i]=edge[u0][i];
    20         vis[i]=0;
    21     }
    22     vis[u0]=1;
    23     dis[u0]=0;
    24     for(i=1;i<n;i++)
    25     {
    26         int mmin=INF,v=-1;
    27         for(j=1;j<=n;j++)
    28         {
    29             if(vis[j]!=1&&dis[j]<mmin)
    30             {
    31                 v=j;
    32                 mmin=dis[j];
    33             }
    34         }
    35         if(v!=-1)
    36         {
    37             vis[v]=1;
    38             for(k=1;k<=n;k++)
    39             {
    40                 if(edge[v][k]!=INF&&dis[v]+edge[v][k]<dis[k])
    41                 {
    42                     dis[k]=dis[v]+edge[v][k];
    43                 }
    44             }
    45         }
    46     }
    47     return dis[n];
    48 }
    49 
    50 
    51 int main()
    52 {
    53     while(scanf("%d%d",&n,&m)!=EOF)
    54     {
    55         if(!n&&!m)break;
    56         memset(edge,0,sizeof(edge));
    57         int i,j;
    58         for(i=1;i<=n;i++)
    59         {
    60             for(j=1;j<=n;j++)
    61             {
    62                 if(i==j)edge[i][j]=0;
    63                 else if(edge[i][j]==0)edge[i][j]=INF;
    64             }
    65         }
    66         for(i=1;i<=m;i++)
    67         {
    68             int u,v,w;
    69             scanf("%d%d%d",&u,&v,&w);
    70             if(w<edge[u][v])
    71             {
    72                 edge[u][v]=edge[v][u]=w;
    73             }
    74         }
    75         int u0=1;
    76         int ans=dijkstra(u0);
    77         printf("%d
    ",ans);
    78     }
    79     return 0;
    80 }
    View Code
  • 相关阅读:
    管理学课程都包括哪些方面的内容?
    关于如何创业的好书推荐:《创业必读12篇》
    关于企业文化的书籍,这本最经典
    如何开展行政管理工作?这些书可以告诉你答案
    企业家必读书籍有哪些?适合企业高管看的书推荐
    如何学好PHP?
    现在入门还有必要学PHP吗?
    Python实现递归二分法查找
    SAP Control framework–CL_GUI_TOOLBAR
    SAP Control framework–DIALOGBOX_CONTAINER
  • 原文地址:https://www.cnblogs.com/zafuacm/p/3213417.html
Copyright © 2011-2022 走看看