• 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;
    }
  • 相关阅读:
    动态规划之矩阵连乘
    常见的开放符号服务器
    QT中的宏定义
    QT Creator项目路径设置
    批处理-日常小功能用法记录
    Qt Creator快捷键记录
    利用Navicat premium实现将数据从Oracle导入到MySQL
    php BCmath 封装类
    PHP 反射类
    Html标签生成类
  • 原文地址:https://www.cnblogs.com/Atlantis67/p/3622128.html
Copyright © 2020-2023  润新知