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[]记录前驱,不同的是在松弛的时候.要考虑和 ...
随机推荐
- matlab学习下拉菜单Pop-Up Menu的基本用法
创建下拉菜单,修改string的属性,tag改为kj1,value值如果是1就显示第一行的sin(x),是几就显示第几行 %可以更改value值var=get(handles.kj1,'value') ...
- 模拟人的手指在UI上滑动时3D模型跟随着移动(Unity)
问题: 怎么让当手指滑动的同时对应的模型发生旋转 解决办法: 1:通过控制摄像机或者模型来实现效果 2:通过获取鼠标移动时X轴Y轴的偏移量来确定模型的旋转角度 3:为了不让人感觉到突兀,建议使用Mat ...
- Linux direct io使用例子
Linux direct io使用 在linux 2.6内核上使用direct io不难,只需按照如下几点来做即可: 1,在open文件时加上O_DIRECT旗标,这样以通告内核我们想对该文件进行直接 ...
- Call to undefined function openssl_decrypt()
laravel报错: Call to undefined function openssl_decrypt() 需要打开php.ini中的扩展: extension=php_openssl.dll
- [jzoj 5782]【NOIP提高A组模拟2018.8.8】 城市猎人 (并查集按秩合并+复杂度分析)
传送门 Description 有n个城市,标号为1到n,修建道路花费m天,第i天时,若gcd(a,b)=m-i+1,则标号为a的城市和标号为b的城市会建好一条直接相连的道路,有多次询问,每次询问某两 ...
- tween.js缓动(补间动画)
一.理解tween.js 如果看到上面的已经理解了,可以跳过下面的部分.下面为对Tween.js的解释 下面就介绍如何使用这个Tween了,首先b.c.d三个参数(即初始值,变化量,持续时间)在缓动开 ...
- Spring Cloud-Ribbon实现客户端的服务均衡(三)
客户端负载均衡与服务端负载均衡 服务端负载均衡 通过服务端负载均衡设备维护的服务清单根据算法(轮训 权重负载 流量负载)取出服务地址 进行转发 客户端负载 将指定服务的服务清单订单(注册中心)下来 在 ...
- Spring Boot-热部署和Debugger使用(三)
热部署 1.添加热部署pom依赖 <!--热部署插件依赖jar包--> <dependency> <groupId>org.springframework.boot ...
- 消息队列Rabbit安装
先安装elang 再安装Rabbit *Rabbit安装路径不能有空格 安装完成
- HDU 4507
数位DP. 一般是利用DFS来求数位DP了,结合了记忆化搜索.设dp[i][j][k]为前i位,并且前i位的数位和mod7为j,前i位的数字的表示数字值mod7.为什么可以这样呢?因为继续DFS下去, ...