首页 > 学院 > 开发设计 > 正文

poj 1797 Heavy Transportation

2019-11-06 06:51:38
字体:
来源:转载
供稿:网友

Heavy Transportation

题目链接:http://poj.org/PRoblem?id=1797

这个题目属于迪杰斯特拉算法的变形题了,大意是在通往目的地的所有路径中找到一条载重最大的道路,但是一条路径的载重由载重量最小的那条边决定。

转换公式:MAX(dis[j],MIN(dis[p],map[p][j])))

代码如下:

#include<stdio.h>int map[1005][1005];int vi[1005],dis[1005];#define INF 10000000 int MIN(int a,int b){	if(a<b)		return a;	return b;}void Dj(int n){	int p;	for(int i=1;i<=n;i++)	{		dis[i]=map[1][i];		vi[i]=0;	}	vi[1]=1;	for(int i=1;i<=n;i++)	{		int max=-1;		for(int j=1;j<=n;j++)		{			if(!vi[j] && dis[j]>max)			{				max=dis[j];				p=j;			}		}		vi[p]=1;		for(int j=1;j<=n;j++)		{			if(!vi[j] && dis[j]<MIN(dis[p],map[p][j]))				dis[j]=MIN(dis[p],map[p][j]);		}	}}int main(){	int index=0;	int t;	int n,m;	int x,y,d;	scanf("%d",&t);	while(t--)	{		scanf("%d%d",&n,&m);		for(int i=0;i<1005;i++)		{			for(int j=0;j<1005;j++)				map[i][j]=-1;		}		for(int i=0;i<m;i++)		{			scanf("%d%d%d",&x,&y,&d);			map[x][y]=map[y][x]=d;		Dj(n);		printf("Scenario #%d:/n%d/n",++index,dis[n]);		printf("/n");	}	return 0;}


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表