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

    最短路

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

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

    Input

    输入包括多组数据。

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

    接下来M行,每行包括3个整数A,B,C(1A,BN,1C1000),表示在路口A与路口B之间有一条路,我们的工作人员需要C分钟的时间走过这条路。

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

    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

    Source

    电子科技大学第六届ACM程序设计大赛 初赛
     
     
     
    Dijkstra算法的直接练习题,最短路的经典算法,基础题目,太久没打,虽然能过不过代码不太好看。。。。
    基本就是在s[]中存以1为起点的最短路长度,每次找s[]中最短的来更新其他节点,就可以了,当然找过的点应该标记一下,下次就不用找这个点了。

     

    #include <iostream>
    #include<cstdio>
    #include<string.h>
    using namespace std;
    int path[105][105];
    int s[105];
    bool use[105];
    int main()
    {
        int n,m;
        scanf("%d%d",&n,&m);
        while (!((n==0)&(m==0))){
            memset(path,1000000,sizeof(path));
            memset(s,1000000,sizeof(s));
            memset(use,true,sizeof(use));
            s[1]=0;
            int j,k,l,g,h;
            j=m;
            while (j--){
                scanf("%d%d%d",&g,&h,&l);
                path[g][h]=l;
                path[h][g]=l;
            }
            for (j=2;j<=n;j++)
                s[j]=path[1][j];
            for (j=2;j<=n;j++){
                l=10000000;
                for (k=2;k<=n;k++){
                    if ((s[k]<l)&&(use[k])){
                        l=s[k];
                        g=k;
                    }
                }
                use[g]=false;
                for (k=2;k<=n;k++){
                    if (s[k]>s[g]+path[g][k])
                        s[k]=s[g]+path[g][k];
                }
            }
            printf("%d\n",s[n]);
            scanf("%d%d",&n,&m);
        }
        return 0;
    }
  • 相关阅读:
    hdu 1455 N个短木棒 拼成长度相等的几根长木棒 (DFS)
    hdu 1181 以b开头m结尾的咒语 (DFS)
    hdu 1258 从n个数中找和为t的组合 (DFS)
    hdu 4707 仓鼠 记录深度 (BFS)
    LightOJ 1140 How Many Zeroes? (数位DP)
    HDU 3709 Balanced Number (数位DP)
    HDU 3652 B-number (数位DP)
    HDU 5900 QSC and Master (区间DP)
    HDU 5901 Count primes (模板题)
    CodeForces 712C Memory and De-Evolution (贪心+暴力)
  • 原文地址:https://www.cnblogs.com/Atlantis67/p/3622128.html
Copyright © 2011-2022 走看看