zoukankan      html  css  js  c++  java
  • POJ-1797-Heavy Transportation

    链接:https://vjudge.net/problem/POJ-1797

    题意:

    给n结点,m条路。路径形式以,L R V给出。

    V为路径承受的最大重量。

    求从1到N路径能承受的最大重量。

    思路:

    依然Dijkstra算法。刚开始想错了,debug半天,发现不需要把地图数组初始化较大值。

    Dis数组维护 :Dis[j] = max(Dis[j],min(Max,Map[w][j]));

    Max为当前最大重量,w为其坐标。

    代码:

    #include <iostream>
    #include <stack>
    #include <memory.h>
    #include <string>
    #include <algorithm>
    #include <math.h>
    #include <iomanip>
    using namespace std;
    const int MAXN = 1000+10;
    const int INF = 1e9;
    int Map[MAXN][MAXN];
    int Dis[MAXN];
    int Vis[MAXN];
    int n,m;
    
    void Print_Dis()
    {
        for (int i = 1;i<=n;i++)
            cout << Dis[i] << ' ';
        cout << endl;
    }
    
    int Dijkstra()
    {
        memset(Dis,0, sizeof(Dis));
        memset(Vis,0, sizeof(Vis));
        for (int i = 1;i<=n;i++)
            Dis[i] = Map[1][i];
        Vis[1] = 1;
        for (int i = 1;i<=n;i++)
        {
            int w = -1,Max = 0;
            for (int j = 1;j<=n;j++)
            {
                if (Vis[j] == 0&&Max < Dis[j])
                {
                    w = j;
                    Max = Dis[j];//找到Dis数组中的最大值
                }
            }
            Vis[w] = 1;
            if (w == n)//找的的为n直接返回
                return Dis[w];
            for (int j = 1;j<=n;j++)
            {
                if (Vis[j] == 0)
                {
                    Dis[j] = max(Dis[j],min(Max,Map[w][j]));//Dis数组维护
                    //cout << Max << ' ' << Map[w][j] << endl;
                }
            }
            //cout << w << endl;
            //cout << Max << ' ' << Map[w][4] << endl;
            //Print_Dis();
        }
    }
    
    int main()
    {
        int t,cnt = 0;
        int x,y,l;
        scanf("%d",&t);
        while (t--)
        {
            scanf("%d%d",&n,&m);
            memset(Map,0, sizeof(Map));
            for (int i = 1;i<=m;i++)
            {
                scanf("%d%d%d",&x,&y,&l);
                Map[x][y] = Map[y][x] = l;
            }
            int Max = Dijkstra();
            if (cnt != 0)
                printf("
    ");
            printf("Scenario #%d:
    %d
    ",++cnt,Max);
        }
    
        return 0;
    }
    

      

  • 相关阅读:
    字符串匹配算法的比较(BF算法/KMP算法/jdk自带的indexOf方法)
    重装Python(pip,anaconda,jupyter notebook)
    Python:词频统计及排序
    python压制警告
    StanfordCoreNLP的简单使用
    最常用的几个DOS命令
    (用大白话讲)为什么我们需要配置环境变量
    通配符 vs 正则表达式
    大白话<组件、控件、插件>三者的区别
    R语言:集合运算
  • 原文地址:https://www.cnblogs.com/YDDDD/p/10272788.html
Copyright © 2011-2022 走看看