#include"stdio.h"
#define INF 100000000
#define N 100
int G[N][N],tax[N],i,j,k,n,t,s,e;
int path[N][N];
void floyd()
{
for(k=0;k<n;k++)
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
t=G[i][k]+G[k][j]+tax[k];
if(t<G[i][j])
G[i][j]=t,path[i][j]=path[i][k];
else if(t==G[i][j])
if(path[i][k]<path[i][j])path[i][j]=path[i][k];
}
}
main()
{
while(scanf("%d",&n),n)
{
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
scanf("%d",&G[i][j]);
if(G[i][j]==-1)G[i][j]=INF;
path[i][j]=j;// 初始化; 表示从i到j线路上的不包含i、j的第一个顶点
}
for(i=0;i<n;i++)scanf("%d",&tax[i]);
floyd();
while(scanf("%d%d",&s,&e)!=EOF&&s!=-1&&e!=-1)
{
printf("From %d to %d :\n",s,e);
printf("Path: %d",s);
k=s-1;
while(k!=e-1)
{
printf("-->%d",path[k][e-1]+1);
k=path[k][e-1];
}
printf("\nTotal cost : %d\n\n",G[s-1][e-1]);
}
}
return 0;
}
HDOJ1385 Minumum Transportation Cost ------简单的floyd
最新推荐文章于 2021-03-06 02:42:33 发布