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[]记录前驱,不同的是在松弛的时候.要考虑和 ...
随机推荐
- Windows Server 2008 R2 搭建DNS服务器(转)
Windows Server 2008 R2 搭建DNS服务器将本机IP设为首选DNS服务器的地址在dos 下分别输入 nslookup www.mydns.com 和 nslookup 192.16 ...
- 【转载】Jmeter之Bean shell
一.什么是Bean Shell BeanShell是一种完全符合Java语法规范的脚本语言,并且又拥有自己的一些语法和方法; BeanShell是一种松散类型的脚本语言(这点和JS类似); BeanS ...
- inherit 关键字使得元素获取其父元素的计算值
它可以应用于任何CSS属性,包括CSS简写 all. 对于继承属性,inherit 关键字只是增强了属性的默认行为,只有在重载(overload)其它规则的时候被使用.对于非继承属性,inherit ...
- Node.js标准的回调函数
Node.js标准的回调函数:第一个参数代表错误信息,第二个参数代表结果. function (err, data) 当正常读取时,err参数为null,data参数为读取到的String.当读取发生 ...
- git 还原到某次commit
不可逆提交 一,reset 1.git log查看提交记录 git log 2.选择某次提交的commit ID,ctrl+c复制提交ID 3.使用git reset –hard 还原到某一次提交 g ...
- Linux目录与相关配置文件讲解
linux目录介绍及配置文件详细介绍 重要目录简介 目录名 作用 boot 与电脑启动相关,推荐单独分区. etc 存放配置文件 mnt 一般用来设置挂载点 src.sys.proc 与系统内核相关, ...
- Yii2验证码使用教程
控制器代码 public function actions() { return [ 'captcha' => [ 'class' => 'yii\captcha\CaptchaActio ...
- 【习题 4-3 UVA - 220】Othello
[链接] 我是链接,点我呀:) [题意] [题解] legal被我打成leagal... 然后注意输出坐标的时候,格式是%2d.. 然后就没啥难的了.. [代码] #include <bits/ ...
- 【Codeforces 350B】Resort
[链接] 我是链接,点我呀:) [题意] [题解] 我们可以把原图的边都反向一下. 然后以每个休息点作为起点,进行dfs. 每次在扩展节点y的时候,要求这个点y必须只有一个出度,然后就能走多远就走多远 ...
- FZU - 2062 - Suneast & Yayamao
先上题目: Problem 2062 Suneast & Yayamao Accept: 146 Submit: 319Time Limit: 1000 mSec Memory L ...