hdu1385 Minimum Transport Cost 字典序最小的最短路径 Floyd
求最短路的算法最有名的是Dijkstra。所以一般拿到题目第一反应就是使用Dijkstra算法。但是此题要求的好几对起点和终点的最短路径。所以用Floyd是最好的选择。因为其他三种最短路的算法都是单源的。
输出字典序最小的路径则需要修改模版。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N =, INF=;
int Map[N][N], dist[N][N], pre[N][N], c[N];
//pre存贮i到j路径中j的前一点
int n;
void floyd()
{
int i,j,k;
for(i=;i<=n;i++)
{
for(j=;j<=n;j++)
{
dist[i][j]=Map[i][j];
pre[i][j]=j;
}
}
for(k=;k<=n;k++)
for(i=;i<=n;i++)
for(j=;j<=n;j++)
{
//if(dist[i][k]==INF||dist[k][j]==INF) continue;
int d=dist[i][k]+dist[k][j]+c[k];
if(d<dist[i][j])
{
dist[i][j]=d;
pre[i][j]=pre[i][k];
}
else if(d==dist[i][j])
{
if(pre[i][j]>pre[i][k])
pre[i][j]=pre[i][k];
}
}
}
int main()
{
//freopen("test.txt","r",stdin);
int i,j,k,a,b;
while(scanf("%d",&n)!=EOF)
{
if(!n) break;
for(i=;i<=n;i++)
for(j=;j<=n;j++)
{
scanf("%d",&Map[i][j]);
if(Map[i][j]<) Map[i][j]=INF;
}
for(i=;i<=n;i++) scanf("%d",&c[i]);
while(scanf("%d%d",&a,&b))
{
if(a==-&&b==-) break;
floyd();
printf("From %d to %d :\n",a,b);
printf("Path: %d",a);
k=a;
while(k!=b){printf("-->%d",pre[k][b]);k=pre[k][b];}
printf("\n");
printf("Total cost : %d\n",dist[a][b]);
printf("\n");
}
}
return ;
}
下面是Floyd的模版。pre[][]记录的是前驱。上面的记录的是后继。
const int N =, INF=0x3f3f3f3f;
int Map[N][N], dist[N][N], pre[N][N];
//pre存贮i到j路径中j的前一点
int n;
void floyd()
{
int i,j,k;
for(i=;i<=n;i++)
{
for(j=;j<=n;j++)
{
dist[i][j]=Map[i][j];
pre[i][j]=i;
}
}
for(k=;k<=n;k++)
for(i=;i<=n;i++)
for(j=;j<=n;j++)
if(dist[i][k]!=INF&&dist[k][j]!=INF&&
dist[i][k]+dist[k][j]<dist[i][j])
{
dist[i][j]=dist[i][k]+ dist[k][j];
pre[i][j]=pre[k][j];
}
}
void init()
{
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
Map[i][j]=INF;
}
hdu1385 Minimum Transport Cost 字典序最小的最短路径 Floyd的更多相关文章
- HDU1385 Minimum Transport Cost (Floyd)
Minimum Transport Cost Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/O ...
- HDU 1385 Minimum Transport Cost (Dijstra 最短路)
Minimum Transport Cost http://acm.hdu.edu.cn/showproblem.php?pid=1385 Problem Description These are ...
- Minimum Transport Cost(floyd+二维数组记录路径)
Minimum Transport Cost Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/O ...
- hdu 1385 Minimum Transport Cost(floyd && 记录路径)
Minimum Transport Cost Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/O ...
- hdu 1385 Minimum Transport Cost (Floyd)
Minimum Transport CostTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Ot ...
- ZOJ 1456 Minimum Transport Cost(Floyd算法求解最短路径并输出最小字典序路径)
题目链接: https://vjudge.net/problem/ZOJ-1456 These are N cities in Spring country. Between each pair of ...
- 【floyd存字典序路径】【HDU1385】【Minimum Transport Cost】
题目大意 求多组i到j的最短路径 并输出字典序最小.... 现在只会floyd的方式 利用dis[i][j] 表示i到j的路径中i 后面的节点 更新是比较dis[i][j] dis[i][k]. 记住 ...
- HDU 1385 Minimum Transport Cost (输出字典序最小路径)【最短路】
<题目链接> 题目大意:给你一张图,有n个点,每个点都有需要缴的税,两个直接相连点之间的道路也有需要花费的费用.现在进行多次询问,给定起点和终点,输出给定起点和终点之间最少花费是多少,并且 ...
- hdu Minimum Transport Cost(按字典序输出路径)
http://acm.hdu.edu.cn/showproblem.php? pid=1385 求最短路.要求输出字典序最小的路径. spfa:拿一个pre[]记录前驱,不同的是在松弛的时候.要考虑和 ...
随机推荐
- 【转】虚拟化(一):虚拟化及vmware产品介绍
由于公司最近在做虚拟化监控,因此就需要把虚拟化方面的知识给学习总结一下,对于虚拟化的概念,摘自百度百科,如下: 虚拟化,是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机.在一台计算机 ...
- [转载]ext4文件系统的delalloc选项造成单次写延迟增加的分析
转载http://www.cnblogs.com/cobbliu/p/5603472.html 最近我们的服务进程遇到kill -15后处于Z的状态,变为了僵尸进程,经过/proc/{thread_i ...
- centos 配置svn http serve
你看到的这个文章来自于http://www.cnblogs.com/ayanmw 基本的安装包有: subversion /httpd/ svn的httpd的mod_dav_svn mod_authz ...
- 洛谷P1616 疯狂的采药【完全背包】
题目描述 LiYuxiang是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师.为此,他想拜附近最有威望的医师为师.医师为了判断他的资质,给他出了一个难题.医师把他带到一个到处都是草药的山洞里对他说 ...
- [luogu1155 NOIP2008] 双栈排序 (二分图染色)
传送门 Description Input 第一行是一个整数 n . 第二行有 n 个用空格隔开的正整数,构成一个 1−n 的排列. Output 共一行,如果输入的排列不是"可双栈排序排列 ...
- js中window.location的用法
用window.location处理解析当前页面URL window.location 对象所包含的属性 属性 描述 hash 从井号(#)开始的URL(锚点) host 主机名和当前URL的端口号 ...
- Python-Pandas数据处理
- Linux 常用密令总结 ------随用随记吧
ubuntu or uqilin 目录文件类ls 查看目录cd 转到目录ps -aux查看所有进程grep 查找| 管道符 用户账户类 su 切换用户sudo 以管理员权限运行命令重启机器 reboo ...
- 0929关于MySQL操作规范(总结)
用户权限管理 创建用户 命令:CREATE USER 'username'@'host' IDENTIFIED BY 'password'; 说明: Username所创建的用户名 host 指定该用 ...
- 5.2 calendar--通用日期的相关函数(4)
calendar类提供以下的函数来推断日历相关的内容: calendar.setfirstweekday(weekday) 设置一周里那一天作为第一天.0是表示星期一,6是表示星期天. 样例: #py ...