poj1797
来源:互联网 发布:网络如何赚钱 编辑:程序博客网 时间:2024/06/04 19:13
原题地址:
http://poj.org/problem?id=1797
题意:
n条公路,要把物品从公路1运送到公路n
每条路都有其最大承载量
要求将物品从1运到N的过程,一次所能运的最多的货物
简单解读题意:
一次能运的最多的货物,即,在到达N的路线中,承载量最小的道路的承载量。
要使承载量最小的道路的承载量最大,即,采用迪杰斯特拉算法,从起点向外扩展,每次都选择承载量最大的路线。当两个路之间无法到达时,默认其承载量为零。即,无法搬运货物。
代码如下:
#include <iostream>#include<cstring>#include<cstdio>#define min(a,b) (a<b?a:b)using namespace std;#define MAX 1005int map[MAX][MAX];bool vis[MAX];int d[MAX];int n,m;void dijisktra(){ int i,j,Max,v; for(i=1;i<=n;i++) { d[i]=map[1][i]; vis[i]=0; }//初始化路径数组 for(i=1;i<=n;i++) { Max=-1;//将默认的最大数初始化为最小 for(j=1;j<=n;j++) { if(!vis[j]&&d[j]>Max) { Max=d[j]; v=j; } }//每次都找最大的路线 vis[v]=1; for(j=1;j<=n;j++) { if(!vis[j]&&d[j]<min(d[v],map[v][j])) d[j]=min(d[v],map[v][j]); }//更新dx } }int main(){ int T,t; int i,j; t=0; scanf("%d",&T); while(T){ T--; scanf("%d%d",&n,&m); for(i=1;i<=n;i++) for(j=1;j<=n;j++) map[i][j]=0;//初始化地图。 //先默认所有的路线都无法到达 int a,b,c; for(i=1;i<=m;i++) { scanf("%d%d%d",&a,&b,&c); map[a][b]=map[b][a]=c; }//输入地图。 dijisktra(); t++; printf("Scenario #%d:\n",t); printf("%d\n\n",d[n]); } return 0;}
阅读全文
0 0
- poj1797
- poj1797
- poj1797
- poj1797
- poj1797
- poj1797
- poj1797
- poj1797
- poj1797
- POJ1797
- poj1797
- poj1797--djikstra
- dijkstra--poj1797
- 【dijkstra】poj1797
- poj1797 dijkstra
- POJ1797 dij的变形。
- poj1797 dijkstra变形
- poj1797(dijstra)
- Tree-----222. Count Complete Tree Nodes(统计完全二叉树的节点个数)
- Android 进阶之路:开启系统中的界面
- androidx86编译踩坑
- cuda矩阵编程(一)
- hbase中创建表、插入数据,更新数据,删除数据
- poj1797
- Redis探索之旅(1)- Redis初识
- hitTest:withEvent:方法
- quartz定时任务时间设置
- Springmvc视图和视图解析器(四)
- Hbase之插入数据
- Android中常用的选择图像,跟换图像等(图像放大缩小等)
- OpenJ_POJ
- iOS UITextField输入手机号时自动添加空格