标签:des style class code java tar
5 0 3 22 -1 4 3 0 5 -1 -1 22 5 0 9 20 -1 -1 9 0 4 4 -1 20 4 0 5 17 8 3 1 1 3 3 5 2 4 -1 -1 0
From 1 to 3 : Path: 1-->5-->4-->3 Total cost : 21 From 3 to 5 : Path: 3-->4-->5 Total cost : 16 From 2 to 4 : Path: 2-->1-->5-->4 Total cost : 17
最基本的floyd最短路,难点在记录字典序最小的路径.....
有两种路径记录方法:
出始化: fa[a][b]=a 则 fa[a][b]=c 表示 a....c->b
出始化: fa[a][b]=b 则 fa[a][b]=c 表示 a->c....b
根据题意,要选择第二种
#include <iostream> #include <cstdio> #include <cstring> #include <vector> #include <algorithm> using namespace std; const int INF=0x3f3f3f3f; int n; int g[110][110],b[110]; int fa[110][110]; int main() { while(scanf("%d",&n)!=EOF) { memset(g,63,sizeof(g)); for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { scanf("%d",&g[i][j]); if(g[i][j]==-1) g[i][j]=INF; } } for(int i=1;i<=n;i++) scanf("%d",&b[i]); for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) fa[i][j]=j; for(int k=1;k<=n;k++) { for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { if(g[i][j]>g[i][k]+g[k][j]+b[k]) { g[i][j]=g[i][k]+g[k][j]+b[k]; fa[i][j]=fa[i][k]; } else if(g[i][j]==g[i][k]+g[k][j]+b[k]) { fa[i][j]=min(fa[i][j],fa[i][k]); } } } } int s,t; while(scanf("%d%d",&s,&t)!=EOF) { if(s==-1&&t==-1) break; printf("From %d to %d :\nPath: ",s,t); int next=fa[s][t]; printf("%d",s); if(s!=t) { while(next!=t) { printf("-->"); printf("%d",next); next=fa[next][t]; } printf("-->%d",t); } printf("\nTotal cost : %d\n\n",g[s][t]); } } return 0; }
HDOJ 1385 Minimum Transport Cost,布布扣,bubuko.com
HDOJ 1385 Minimum Transport Cost
标签:des style class code java tar
原文地址:http://blog.csdn.net/ck_boss/article/details/25337509