POJ 1797 Heavy Transportation(Dijkstra算法)

来源:互联网 发布:淘宝图片的尺寸是多少 编辑:程序博客网 时间:2024/05/18 07:35




http://poj.org/problem?id=1797





最大承重  题意是 :  n个城市   m条道路    在每条道路上有一个承载量   现在要求从城市1到城市的最大承载量,所谓最大承重 即走可以从1走到n的多条路径中 每条路径中最小承重道路中的最大值  运用Dijkstra算法  修改松弛条件即可 





AC代码:

#include <stdio.h>  #include <string.h>      int n,m;  int map[1010][1010];  int vis[1010];  int dis[1010];      int min(int a,int b){      return a<b?a:b;  }      void Dijkstra(){      int max=0;      for (int i=1;i<=n;i++){          vis[i]=0;          dis[i]=map[1][i];//这里表示最大承重       }            vis[1]=1;      dis[1]=0;      int v;            for (int i=1;i<=n;i++){          int x=-1;          for (int j=1;j<=n;j++){              if (!vis[j]&&dis[j]>x)//该点没有被访问过  找到最大承重               {                  x=dis[j];                  v=j;              }          }                    vis[v]=1;                    for (int j=1;j<=n;j++){              if (!vis[j]&&dis[j]<min(dis[v],map[v][j]))// 更新最大承重                 {                  dis[j]=min(dis[v],map[v][j]);              }                             }      }        }    int main (){      int T,l;      int a,b;      int count=0;      scanf ("%d",&T);      while (T--){          count++;          scanf ("%d%d",&n,&m);                    memset(map,0,sizeof(map));                     for (int i=1;i<=m;i++){              scanf ("%d%d%d",&a,&b,&l);              map[a][b]=l;              map[b][a]=l;                  }           Dijkstra();          printf ("Scenario #%d:\n",count);          printf ("%d\n\n",dis[n]);      }            return 0;  }  

0 0