hdu 1690 Bus System--floyd

本文介绍了一种使用Floyd算法解决最短路径问题的方法,通过实例演示了如何计算一组站之间的最短距离,并对算法进行了优化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include<stdio.h>
__int64 map[110][110];
__int64 station[110];
#define  Max  0x7fffffffffffff//设一最大值
__int64 l1,l2,l3,l4,c1,c2,c3,c4,d;
int n,m;
__int64 deng(__int64 d)//计算费用
{
	if(d==0)
		return 0;
	else if(d<=l1)
		return c1;
	else if(d<=l2)
		return c2;
	else if(d<=l3)
		return c3;
	else if(d<=l4)
		return c4;
	else return Max;
}
void floyd()
{
	int i,j,k;
	for(k=1;k<=n;k++)
		for(i=1;i<=n;i++)
			for(j=1;j<=n;j++)
				if(map[i][k]!=Max&&map[k][j]!=Max&&map[i][j]>map[i][k]+map[k][j])
					map[i][j]=map[i][k]+map[k][j];
}
int main()
{
	int i,j,t,num=1;
	scanf("%d",&t);
	while(t--)
	{
		scanf("%I64d%I64d%I64d%I64d%I64d%I64d%I64d%I64d",&l1,&l2,&l3,&l4,&c1,&c2,&c3,&c4);
		scanf("%d%d",&n,&m);
		for(i=1;i<=n;i++)
			scanf("%I64d",&station[i]);
		for(i=1;i<=n;i++)
			for(j=i+1;j<=n;j++)
			{
				d=station[i]-station[j];
				if(d<0)
					d=-d;
				map[i][j]=map[j][i]=deng(d);
			}
		floyd();
		printf("Case %d:\n",num++);
		while(m--)
		{
			scanf("%d%d",&i,&j);
			if(map[i][j]!=Max)
				printf("The minimum cost between station %d and station %d is %I64d.\n",i,j,map[i][j]);
			else printf("Station %d and station %d are not attainable.\n",i,j);
		}
	}
	return 0;
}

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值