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

    最短路



    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& lt;=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
     
     dijkstra:
     1 #include<cstdio>
     2 #include<cstring>
     3 #include<algorithm>
     4 using namespace std;
     5 
     6 const int inf=0x3f3f3f;
     7 int m,n;
     8 int gp[105][105];
     9 int d[105];
    10 int vis[105];
    11 
    12 void dijkstra()
    13 {
    14     int i,j,pos,sum=0;
    15     vis[1]=1;
    16     for(i=2;i<=m;i++)
    17     d[i]=gp[1][i];
    18     for(i=2;i<=m;i++)
    19     {
    20         int temp=inf;
    21         for(j=1;j<=m;j++)
    22         {
    23             if(!vis[j]&&d[j]<temp)
    24             {
    25                 pos=j;
    26                 temp=d[j];
    27             }
    28         }
    29         vis[pos]=1;
    30         for(j=1;j<=m;j++)
    31         {
    32             if(d[pos]+gp[pos][j]<d[j]&&!vis[j])
    33             d[j]=gp[pos][j]+d[pos];
    34         }
    35     }
    36     printf("%d
    ",d[m]);
    37 }
    38 
    39 int main()
    40 {
    41     int a,b,c;
    42     while(scanf("%d%d",&m,&n),m|n)
    43     {
    44         memset(vis,0,sizeof(vis));
    45         memset(gp,inf,sizeof(gp));
    46         for(int i=0;i<n;i++)
    47         {
    48             scanf("%d%d%d",&a,&b,&c);
    49             gp[a][b]=gp[b][a]=min(c,gp[a][b]);
    50         } 
    51         dijkstra();
    52     }
    53     return 0;
    54 }

     spfa:

     1 #include<cstdio>
     2 #include<queue>
     3 #include<cstring>
     4 #include<algorithm>
     5 using namespace std;
     6 
     7 const int maxn=110;
     8 const int maxm=10010;
     9 const int inf=0x3f3f3f3f;
    10 
    11 struct edge
    12 {
    13     int u,v,w,next;
    14 }edges[maxm];
    15 
    16 bool vis[maxn];
    17 int head[maxm];
    18 int d[maxn];
    19 int cnt;
    20 int m,n;
    21 
    22 void init()
    23 {
    24     memset(head,-1,sizeof(head));
    25     cnt=0;
    26 }
    27 
    28 void addedge(int u,int v,int w)
    29 {
    30     edges[cnt]=(edge){u,v,w,head[u]};
    31     head[u]=cnt++;
    32 }
    33 
    34 void spfa(int s)
    35 {
    36     queue<int>q;
    37     memset(vis,0,sizeof(vis));
    38     memset(d,inf,sizeof(d));
    39     d[s]=0;
    40     q.push(s);
    41     vis[s]=1;
    42     while(!q.empty())
    43     {
    44         int u=q.front();
    45         q.pop();
    46         vis[u]=0;
    47         for(int i=head[u];i!=-1;i=edges[i].next)
    48         {
    49             edge e=edges[i];
    50             if(d[e.v]>d[e.u]+e.w)
    51             {
    52                 d[e.v]=d[e.u]+e.w;
    53                 if(!vis[e.v])
    54                 {
    55                     q.push(e.v);
    56                     vis[e.v]=1;
    57                 }
    58             }
    59         }
    60     }
    61     printf("%d
    ",d[m]);
    62 }
    63 
    64 int main()
    65 {
    66     int u,v,w;
    67     while(scanf("%d%d",&m,&n),m|n)
    68     {
    69         init();
    70         for(int i=0;i<n;i++)
    71         {
    72             scanf("%d%d%d",&u,&v,&w);
    73             addedge(u,v,w);
    74             addedge(v,u,w);
    75         }
    76         spfa(1);
    77     }
    78     return 0;
    79 }
  • 相关阅读:
    考研路线及北大光华学院MBA的一些知识
    返回下表中所有同学语文成绩最低的1次考试成绩, pandas系列
    elasticsearch ES使用文档
    flask 基础用法(自己看的笔记)
    pigx集成sharding jdbc
    从rtmp拉流后进行python鼻子定位demo
    物流-门店监控-在线直播系统搭建-nginx核心部分
    Java中的锁分类与使用
    数据库中的锁
    【转】常见的性能测试缺陷
  • 原文地址:https://www.cnblogs.com/homura/p/4721349.html
Copyright © 2011-2022 走看看