hdoj 1385 输出 最短路的最小字典序路径
2014-09-28 14:53
211 查看
#include<stdio.h> #include<string.h> #define inf 99999999 int a[201][201]; int path[201][201]; int b[201],n; void init() { int i,j; for(i=1;i<=n;i++) for(j=1;j<=n;j++) path[i][j]=j; } int main() { while(scanf("%d",&n),n) { int i,j,c,d,k,x; for(i=1;i<=n;i++) for(j=1;j<=n;j++) { scanf("%d",&a[i][j]); if(a[i][j]==-1) a[i][j]=inf; } for(i=1;i<=n;i++) scanf("%d",&b[i]); init(); for(k=1;k<=n;k++) for(i=1;i<=n;i++) for(j=1;j<=n;j++) { if(a[i][j]>a[i][k]+a[k][j]+b[k]) { a[i][j]=a[i][k]+a[k][j]+b[k]; path[i][j]=path[i][k]; } else if(a[i][j]==a[i][k]+a[k][j]+b[k]&&path[i][j]>path[i][k]) { path[i][j]=path[i][k];//这里path[path[i][k]][j]=...=j } } while(scanf("%d%d",&c,&d)==2) { if(c==-1&&d==-1) break; printf("From %d to %d :\n",c,d); printf("Path: "); x=c; printf("%d",c); while(x!=d) { printf("-->%d",path[x][d]); x=path[x][d]; } printf("\nTotal cost : %d\n\n",a[c][d]); } } return 0; }
用邻接矩阵记录路径,用二维的可以保留每段路的开头
或结尾,初始化path[i][j]=j;
相关文章推荐
- HDOJ 题目1385 Minimum Transport Cost(最短路,输出路径)
- HDOJ 题目 1385 Minimum Transport Cost(最短路输出路径)
- HDU 1385 Minimum Transport Cost 【最短路 + 最小字典序路径输出】
- uva 10537 - The Toll! Revisited (逆向思维+最短路+输出字典序最小路径)
- hdu_1385 逆向SPFA求字典序最小最短路
- HDOJ 5294 Tricks Device 最短路(记录路径)+最小割
- hdu 1385 floyd+最小字典序路径输出!!
- hdu 1385 最短路+输出字典序--好题
- hdoj 4857 逃生 【拓扑排序 输出字典序最小解】
- HDU1385 【输出字典序最小的最短路】
- HDOJ3035平面图最小割转最短路
- hdu 1385(最短路+输出路径)
- hdu 1385(求出最短路并输出最短路径)
- HDOJ 1814 - Peaceful Commission 输出字典序最小的2-sat方案...暴力2-sat
- hdu 1385 求字典序最小的最短路
- HDOJ 1385 Minimum Transport Cost (Floyd + 打印字典序最小的路径)
- hdu 1385(zoj 1456)Minimum Transport Cost(最短路,输出路径,Floyd实现)
- hdoj 3251 Being a Hero 【建图后求解最小割 + 输出任意一组最小割里面边 的编号】
- HDOJ 5294 Tricks Device 最短路(记录路径)+最小割
- hdu 1385 Minimum Transport Cost(最短路 + 字典序最小路径)