标签:hdu1690 bus system floyd 最短路
2 1 2 3 4 1 3 5 7 4 2 1 2 3 4 1 4 4 1 1 2 3 4 1 3 5 7 4 1 1 2 3 10 1 4
Case 1: The minimum cost between station 1 and station 4 is 3. The minimum cost between station 4 and station 1 is 3. Case 2: Station 1 and station 4 are not attainable.
#include <stdio.h>
#include <limits.h>
#define INF 110000000000
typedef long long ll ;
ll graph[110][110] , p[110];
//bool visited[110] ;
ll min(ll a , ll b)
{
return a>b?b:a ;
}
void floyd(int n)
{
for(int k = 1 ; k <= n ; ++k)
{
for(int i = 1 ; i <= n ; ++i)
{
for(int j = 1 ; j <= n ; ++j)
{
graph[i][j] = min(graph[i][j],graph[i][k]+graph[k][j]) ;
}
}
}
}
int main()
{
int t , c = 1;
scanf("%d",&t) ;
while(t--)
{
ll l1,l2,l3,l4,c1,c2,c3,c4 ;
scanf("%I64d%I64d%I64d%I64d%I64d%I64d%I64d%I64d",&l1,&l2,&l3,&l4,&c1,&c2,&c3,&c4) ;
int n , m ;
scanf("%d%d",&n,&m) ;
for(int i = 1 ; i <= n ; ++i)
{
scanf("%I64d",&p[i]) ;
}
for(int i = 1 ; i <= n ; ++i)
{
graph[i][i] = 0 ;
for(int j = 1 ; j < i ; ++j)
{
ll dis = p[i]-p[j] ;
dis = dis>0?dis:-dis ;
if(dis<=l1)
{
graph[i][j] = graph[j][i] = c1 ;
}
else if(dis<=l2)
{
graph[i][j] = graph[j][i] = c2 ;
}
else if(dis<=l3)
{
graph[i][j] = graph[j][i] = c3 ;
}
else if(dis<=l4)
{
graph[i][j] = graph[j][i] = c4 ;
}
else
{
graph[i][j] = graph[j][i] = INF ;
}
}
}
floyd(n) ;
printf("Case %d:\n",c++) ;
for(int i = 0 ; i < m ; ++i)
{
int s , t ;
scanf("%d%d",&s,&t) ;
if(graph[s][t] >= INF)
{
printf("Station %d and station %d are not attainable.\n",s,t) ;
}
else
{
printf("The minimum cost between station %d and station %d is %I64d.\n",s,t,graph[s][t]) ;
}
}
}
return 0 ;
}hdu 1690 Bus System 最短路 Floyd算法。。INF一定要很大很大。。。数据类型用long long。
标签:hdu1690 bus system floyd 最短路
原文地址:http://blog.csdn.net/lionel_d/article/details/44698737