• HDOJ 2544 Dijkstra


    迪杰斯特拉算法的过程如下:

    初始化,把除起点之外的所有点到起点的距离初始化为 INF,起点到起点的距离记为0,标记清空,;

    FOR i = 1:n

      选取到起点距离最近的结点;

      如果选取的点为目标点,结束,否则标记这个点,并对它相邻的所有点进行松弛操作;

    END

    -----------------------------------------------------------------------------------

    # include <stdio.h>
    # include <string.h>
    
    # define N 105
    # define INF 100005
    
    int n, m;
    int w[N][N];
    
    int min(int x, int y)
    {
        return (x<y ? x:y);
    }
    
    void init(void)
    {
        int i, j, u, v, t;
        
        for (i = 1; i <= n; ++i)
        for (j = 1; j <= n; ++j)
        {
            w[i][j] = INF;
        }
    
        for (i = 0; i < m; ++i)
        {
            scanf("%d%d%d", &u, &v, &t);
            if (t < w[u][v]) w[u][v] = w[v][u] = t;
        }
    }
    
    void solve(void)
    {
        int d[N], i, m, x, j;
        char v[N];
        
        memset(v, 0, sizeof(v));
        for (d[1] = 0, i = 2; i <= n; ++i)
            d[i] = INF;
        for (i = 1; i <= n; ++i)
        {
            m = INF;
            for (j = 1; j <= n; ++j) if (!v[j] && d[j]<=m) m = d[x = j];
            if (x == n) break;
            v[x] = 1;
            for (j = 1; j <= n; ++j) d[j] = min(d[j], d[x]+w[x][j]);
        }
        printf("%d\n", d[n]);
    }
    
    int main()
    {    
        while (scanf("%d%d", &n, &m), n&&m)
        {
            init();
            solve();
        }
    
        return 0;
    }

    ------------------------------------------------------------------------------

  • 相关阅读:
    数据库范式
    java String.split()用法
    1.4 IoC控制反转
    利用shrinkwrap锁定依赖版本
    清晨开启电脑自动拉取项目更新
    JS如何获取屏幕、浏览器及网页高度宽度?
    Navigator 对象,能够清楚地知道浏览器的相关信息
    iconfont 转换为图标字体
    VS code的搜索、替换与正则替换
    点九图制作方法
  • 原文地址:https://www.cnblogs.com/JMDWQ/p/2584122.html
Copyright © 2020-2023  润新知