zoukankan      html  css  js  c++  java
  • CDOJ 30 裸最短路 SPFA

    最短路 Edit

    Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others)

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

    Input

    输入包括多组数据。

    每组数据第一行是两个整数NN ,MM (N100N≤100 ,M10000M≤10000 ),NN 表示成都的大街上有几个路口,标号为11 的路口是商店所在地,标号为NN 的路口是赛场所在地,MM 则表示在成都有几条路。N=M=0N=M=0 表示输入结束。

    接下来MM 行,每行包括33 个整数AA ,BB ,CC (1A1≤A ,BNB≤N ,1C10001≤C≤1000 ),表示在路口AA 与路口BB 之间有一条路,我们的工作人员需要CC 分钟的时间走过这条路。

    输入保证至少存在11 条商店到赛场的路线。

    Output

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

    Sample input and output

    Sample InputSample Output
    2 1
    1 2 3
    3 3
    1 2 5
    2 3 5
    3 1 2
    0 0
    3
    2

    Hint

    Source

    电子科技大学第六届ACM程序设计大赛 初赛
     
    题意: 中文题意
     
    题解:再来一遍SPFA  当队头节点now出队时 需要 used[now]=0;
     1 #include<bits/stdc++.h>
     2 #define ll __int64
     3 #define mod 1e9+7
     4 #define PI acos(-1.0)
     5 #define bug(x) printf("%%%%%%%%%%%%%",x);
     6 #define inf 1e8
     7 using namespace std;
     8 int  pre[105];
     9 int dis[105];
    10 int n,m;
    11 int s,t,d;
    12 int used[105];
    13 int now,zha;
    14 int nedge=0;
    15 struct node
    16 {
    17     int pre;
    18     int to;
    19     int w;
    20 }N[20005];
    21 void add(int aa,int bb,int cc)
    22 {
    23     nedge++;
    24     N[nedge].to=bb;
    25     N[nedge].w=cc;
    26     N[nedge].pre=pre[aa];
    27     pre[aa]=nedge;
    28 }
    29 queue<int>q;
    30 void spfa()
    31 {
    32     for(int i=1;i<=n;i++)
    33         {
    34             dis[i]=inf;
    35             used[i]=0;
    36         }
    37     dis[1]=0;
    38     q.push(1);
    39     used[1]=1;
    40     while(!q.empty())
    41     {
    42         now=q.front();
    43         q.pop();
    44         used[now]=0;
    45       for(int i=pre[now];i;i=N[i].pre)
    46       {
    47           if(dis[now]+N[i].w<dis[N[i].to])
    48          {
    49            dis[N[i].to]=dis[now]+N[i].w;
    50            if(!used[N[i].to])
    51            {
    52               used[N[i].to]=1;
    53               q.push(N[i].to);
    54            }
    55           }
    56       }
    57     }
    58 }
    59 int main()
    60 {
    61     while(scanf("%d %d",&n,&m)&&n&&m)
    62  {
    63     nedge=0;
    64     memset(N,0,sizeof(N));
    65     memset(pre,0,sizeof(pre));
    66     memset(dis,0,sizeof(dis));
    67     for(int i=1;i<=m;i++)
    68     {
    69         scanf("%d %d %d",&s,&t,&d);
    70         add(s,t,d);
    71         add(t,s,d);
    72     }
    73     spfa();
    74     printf("%d
    ",dis[n]);
    75  }
    76     return 0;
    77 }
  • 相关阅读:
    rac启动维护笔记
    cache-fusion笔记
    RAC配置笔记
    记一次异机rman还原后的操作
    索引小结
    DBlink的创建与删除
    小说经典语录
    SQL通配符
    ArrayList集合详解
    Oracle数据库四种数据完整性约束
  • 原文地址:https://www.cnblogs.com/hsd-/p/5674855.html
Copyright © 2011-2022 走看看