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[]记录前驱,不同的是在松弛的时候.要考虑和 ...
随机推荐
- 团体程序设计天梯赛-练习集-L1-032. Left-pad
L1-032. Left-pad 根据新浪微博上的消息,有一位开发者不满NPM(Node Package Manager)的做法,收回了自己的开源代码,其中包括一个叫left-pad的模块,就是这个模 ...
- 微信小程序-蓝牙连接
最近的项目需要使用小程序的蓝牙功能与硬件设备进行连接相互传送数据指令,联调过程中发现一些问题,于是想着记录下来,方便以后查看! 1.0一般使用蓝牙功能肯定是想连接某一个蓝牙设备,所以需要知道这个蓝牙设 ...
- 51nod1185 威佐夫游戏 V2【博弈论】
有2堆石子.A B两个人轮流拿,A先拿.每次可以从一堆中取任意个或从2堆中取相同数量的石子,但不可不取.拿到最后1颗石子的人获胜.假设A B都非常聪明,拿石子的过程中不会出现失误.给出2堆石子的数量, ...
- 【ownCloud】添加信任域
如果在安装ownCloud后,更换了访问方式,比如刚开始是http://127.0.0.1/owncloud,变成了http://1.1.1.1/owncloud,那么在访问时可能得到这样的页面: 您 ...
- PHP AES cbc模式 pkcs7 128加密解密
今天在对接一个第三方接口的时候,对方需要AES CBC模式下的加密.这里简单写一个demo class Model_Junjingbao extends Model { private static ...
- 将 Vue 组件库发布到 npm
制作了一套自己的组件库,并发布到npm上,项目代码见 GitHub . 前期准备 有一个npm账号 安装了vue-cli 搭建项目 vue init webpack hg-vcomponents cd ...
- 读取com口接收byte数据的处理
procedure Tfrm_CheckCloth.cnrs232ReceiveData(Sender: TObject; Buffer: Pointer; BufferLength: Word); ...
- 洛谷 P3819 松江1843路
题目描述 涞坊路是一条长L米的道路,道路上的坐标范围从0到L,路上有N座房子,第i座房子建在坐标为x[i]的地方,其中住了r[i]人. 松江1843路公交车要在这条路上建一个公交站,市政府希望让最多的 ...
- 安装Maven并搭建Maven私有仓库
一.说明 Maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具.我们在进行Java代码开发的时候,Eclipse+Maven+Jetty是一个十 ...
- HDU 4530
今天让人看不起了,话说好伤心,说我搞了ACM那么久都没获得拿得出手的奖.... 今晚爷爷我要狂刷2013腾讯马拉松的水题,奶奶滴,哈哈哈哈...T_T #include <iostream> ...