您的位置:首页 > 其它

Bus System 我对自己无语了。。wa了n次原来输出格式搞错了。唉。

2011-05-01 20:18 211 查看
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

#define inf 0x7f7f7f7f7f7f7f7fLL
__int64 map[110][110],cost[10],dis[10],sta[110];
int a,b,M,N,l=0;

__int64 exp(__int64 x)
{
if(x==0)
return 0;
if(x>0&&x<=dis[1])
return cost[1];
else if(x<=dis[2])
return cost[2];
else if(x<=dis[3])
return cost[3];
else if(x<=dis[4])
return cost[4];
else
return inf;
}
void floyd( )
{
int i,j,k,t;
for(k=1;k<=M;k++)
for(i=1;i<=M;i++)
for(j=1;j<=M;j++)
{
if(map[k][j]!=inf&&map[i][k]!=inf&&map[i][j]>map[i][k]+map[k][j])
map[i][j]=map[i][k]+map[k][j];

}
}
void print(int a,int b)
{

if(map[a][b]!=inf)
printf("The minimum cost between station %d and station %d is %I64d.\n",a,b,map[a][b]);
else
printf("Station %d and station %d are not attainable.\n",a,b);
}

int main( )
{
int P,i,j;
scanf("%d",&N);
while(N--)
{
l++;
for(i=1;i<=4;i++)
scanf("%I64d",&dis[i]);
for(i=1;i<=4;i++)
scanf("%I64d",&cost[i]);
scanf("%d%d",&M,&P);
for(i=1;i<=M;i++)
scanf("%I64d",&sta[i]);
for(i=1;i<=M;i++)
for(j=i+1;j<=M;j++)
map[i][j]=map[j][i]=exp(abs(sta[j]-sta[i]));
floyd();
printf("Case %d:\n",l);
for(i=1;i<=P;i++)
{
scanf("%d%d",&a,&b);
print(a,b);        //刚开始时这里超时,我把floy 函数放里面了。悲剧。
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: