hdu 1385 Minimum Transport Cost (Floyd 路径输出)
来源:互联网 发布:使用u盘安装linux系统 编辑:程序博客网 时间:2024/05/20 22:02
题目大意:给出邻接矩阵(-1表示无路),若节点i到j不能直达,则还需加上中间节点k的花费tax[k],求最短路并输出路径。
坑点:
1、没告诉取值范围。(数组瞎开到1000)
2、节点i到其自身的路径输出格式为:i,而不是i-->i
3、每个询问之后,输出一个空行。
#include <stdio.h>#include <cstring>#include <algorithm>using namespace std;#define inf 0x3f3f3f3f#define N 1005int A[N][N],path[N][N],n,tax[N];//用path[i][j]表示i到j的后继节点。比如:i->k->m->j,则path[i][j]=k,path[k][j]=m,path[m][j]=j。void init(){ memset(A,inf,sizeof(A)); memset(path,-1,sizeof(path)); for(int i=0; i<=n; ++i) A[i][i]=0;}void Floyd(){ for(int k=1; k<=n; ++k) for(int i=1; i<=n; ++i) for(int j=1; j<=n; ++j) if(A[i][j]>=A[i][k]+A[k][j]+tax[k]) { if(A[i][j]==A[i][k]+A[k][j]+tax[k]) path[i][j]=min(path[i][j],path[i][k]); else path[i][j]=path[i][k]; A[i][j]=A[i][k]+A[k][j]+tax[k]; }}void output(int s,int e){ int next=path[s][e]; printf("Path: %d",s); while(next!=e){ printf("-->%d",next); next=path[next][e]; } printf("-->%d\n",e);}int main(){ int i,j,x; while(~scanf("%d",&n)&&n) { init(); for(i=1; i<=n; ++i) for(j=1; j<=n; ++j) { scanf("%d",&x); if(x!=-1) { A[i][j]=x; path[i][j]=j; } } for(i=1; i<=n; ++i) scanf("%d",&tax[i]); Floyd(); int s,e; while(~scanf("%d%d",&s,&e)) { if(s==-1&&e==-1) break; printf("From %d to %d :\n",s,e); if(s==e) printf("Path: %d\n",s); else output(s,e); printf("Total cost : %d\n",A[s][e]); puts(""); } } return 0;}
0 0
- HDU 1385 Minimum Transport Cost (Floyd算法 + 路径输出)
- hdu 1385 Minimum Transport Cost (Floyd 路径输出)
- HDU 1385 Minimum Transport Cost(Floyd+路径输出)
- hdoj Minimum Transport Cost 1385 (floyd++路径输出)
- hdu 1385(zoj 1456)Minimum Transport Cost(最短路,输出路径,Floyd实现)
- hdu 1385 Minimum Transport Cost--Floyd算法+点权值+记录路径
- HDU 1385 Minimum Transport Cost(Floyd + 打印路径)
- HDU 1385Minimum Transport Cost(floyd+记录路径)
- HDU 1385(Minimum Transport Cost)floyd+正向返回路径
- hdu 1385 Minimum Transport Cost(floyd && 记录路径)
- hdu 1385 Minimum Transport Cost(Floyd打印路径)
- hdu 1385 Minimum Transport Cost (Floyd 记录路径)
- HDU 1385 Minimum Transport Cost(Floyd+字典序最小路径)
- HDU 1385 Minimum Transport Cost(floyd)(记录路径)
- HDU-1385-Minimum Transport Cost(floyd)
- hdu 1385 Minimum Transport Cost Floyd
- HDU 1385:Minimum Transport Cost【Floyd】
- HDU 1385 Minimum Transport Cost(Floyd)
- 第2章 算法入门
- c语言—数组2
- 【练习题】读取一个字符串,计算每个字母出现的个数
- Median of Two Sorted Arrays - LeetCode 4
- 练习代码(三)复用类
- hdu 1385 Minimum Transport Cost (Floyd 路径输出)
- 脚本无阻塞加载
- 多行文本超出 JS省略号...
- java中多线程的基本理解以及运行机制
- 黑马程序员——java基础——GUI
- Jackson 使用遇到 Unrecognized field, not marked as ignorable
- 关于wikibook上的singleton的疑问
- Struts2不进action就跳到Input配置的页面
- iOS开发使用.ttf或.otf外部字体库