ZOJ-1456 Minimum Transport Cost---Floyd变形+路径输出字典序最小
题目链接:
https://vjudge.net/problem/ZOJ-1456
题目大意:
Spring国家有N个城市,每队城市之间也许有运输路线,也可能没有。现在有一些货物要从一个城市运到另一个城市。运输费有两部分组成:
城市之间的运输成本,路过一个城市的税,除了起点和终点城市。多条路要求字典序最小
思路:
此处运用Floyd的思想,由于每经过一个城市需要交纳费用,所以在加入城市k的时候判断d[i][j]和d[i][k]+d[k][j]+w[k]的大小,此处需要防止i和j等于k的情况。字典序最小存路径就不能按照原来的方法倒叙存储路径,此处的path[i][j]存储的是点i到达点j的最短路径上点i后面的点。初始化的时候如果点a和点b之间存在路径,那么path[a][b] = b,每次加入中间点k时,如果可以更新最短路,path[i][j]应该等于path[i][k],因为存的是i到j的最短路径上i点后面的那个点的值,如果k点加入可以更新最短路,那么从i到j的路径上i点后面的点应该变成从i到k的路径上i点后面的点的值。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<queue>
#include<stack>
#include<map>
#include<set>
#include<sstream>
using namespace std;
typedef long long ll;
const int maxn = 1e2 + ;
const int INF = 1e9 + ;
int T, n, m, cases;
int Map[maxn][maxn];
int path[maxn][maxn];//path[i][j]存从i点出发到j带你的路径上,i点的后一个点
int w[maxn];
int main()
{
while(cin >> n && n)
{
memset(path, -, sizeof(path));
for(int i = ; i <= n; i++)
{
for(int j = ; j <= n; j++)
{
cin >> Map[i][j];
if(Map[i][j] < )Map[i][j] = INF;
else if(i != j)path[i][j] = j;
}
}
for(int i = ; i <= n; i++)
{
cin >> w[i];
}
for(int k = ; k <= n; k++)
{
for(int i = ; i <= n; i++)
{
for(int j = ; j <= n; j++)
{
if(i == k || j == k)continue;
if(Map[i][j] > Map[i][k] + w[k] + Map[k][j])
{
Map[i][j] = Map[i][k] + Map[k][j] + w[k];
path[i][j] = path[i][k];
}
else if(Map[i][j] == Map[i][k] + Map[k][j] + w[k] && path[i][j] != - && path[i][k] != -)
{
path[i][j] = min(path[i][j], path[i][k]);
}
}
}
}
int u, v;
while(cin >> u >> v && (u + v > ))
{
printf("From %d to %d :\n", u, v);
int x = u;
printf("Path: %d", x);
while(x != v)
{
printf("-->%d", path[x][v]);
x = path[x][v];
}
puts("");
printf("Total cost : %d\n\n", Map[u][v]);
}
}
return ;
}
ZOJ-1456 Minimum Transport Cost---Floyd变形+路径输出字典序最小的更多相关文章
- ZOJ 1456 Minimum Transport Cost(floyd+后继路径记录)
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1456 题意:求最短路并且输出字典序最小的答案. 思路:如果用dijkstr ...
- ZOJ 1456 Minimum Transport Cost(Floyd算法求解最短路径并输出最小字典序路径)
题目链接: https://vjudge.net/problem/ZOJ-1456 These are N cities in Spring country. Between each pair of ...
- 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 ...
- Minimum Transport Cost Floyd 输出最短路
These are N cities in Spring country. Between each pair of cities there may be one transportation tr ...
- hdu 1385 Minimum Transport Cost(floyd && 记录路径)
Minimum Transport Cost Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/O ...
- 【floyd存字典序路径】【HDU1385】【Minimum Transport Cost】
题目大意 求多组i到j的最短路径 并输出字典序最小.... 现在只会floyd的方式 利用dis[i][j] 表示i到j的路径中i 后面的节点 更新是比较dis[i][j] dis[i][k]. 记住 ...
- HDU1385 Minimum Transport Cost (Floyd)
Minimum Transport Cost Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/O ...
- hdu1385 Minimum Transport Cost 字典序最小的最短路径 Floyd
求最短路的算法最有名的是Dijkstra.所以一般拿到题目第一反应就是使用Dijkstra算法.但是此题要求的好几对起点和终点的最短路径.所以用Floyd是最好的选择.因为其他三种最短路的算法都是单源 ...
随机推荐
- vue-axios基本用法
废话不多说,直接搞事搞事. 首先安装axios: 1):npm install 2):npm install vue-axios --save 3):npm install qs.js --save ...
- shell命令总结一
简述:这篇总结是在360企业安全实习第一周学到的. Linux中的 2>&1 .if文件命令 .tr .$0等相关参数含义的用法 1. 2>&1 command>/d ...
- c语言程序设计第3周编程作业(数字特征)
题目内容: 对数字求特征值是常用的编码算法,奇偶特征是一种简单的特征值.对于一个整数,从个位开始对每一位数字编号,个位是1号,十位是2号,以此类推.这个整数在第n位上的数字记作x,如果x和n的奇偶性相 ...
- Git 建立仓库及常用命令速查表
Git新建仓库两种模式: 一.项目在本地时,本地初始化仓库并提交至Coding.Net 新建一个空白目录并进入,执行如下流程 1.git init2.项目代码复制到当前目录3.git add *4.g ...
- 201621123050 《Java程序设计》第7周学习总结
1. 本周学习总结 1.1 思维导图:Java图形界面总结 2.书面作业 1. GUI中的事件处理 1.1 写出事件处理模型中最重要的几个关键词. 1.事件:用户的操作,例如点击或输入之类的操作 2. ...
- Alpha冲刺第一天
Alpha冲刺第一天 站立式会议 项目进展 项目的第一天,主要工作是对项目的开发进行规划,以及将规划的成果转化为燃尽图与博客文章.依据项目需求分析报告与开题报告中已经完成的设计任务和项目规划,我们将系 ...
- org.apache.jasper.JasperException: The absolute uri: http://java.sun.com/jsp/jstl/core cannot be res
解决:web项目出现如上问题,据查是版本问题: JSTL 1.0 的声明是: <%@ taglib prefix="c" uri="http://java.sun. ...
- Python randrange() 函数
Python randrange() 函数 Python 数字 描述 randrange() 方法返回指定递增基数集合中的一个随机数,基数缺省值为1. 语法 以下是 randrange() 方法的语 ...
- Android属性动画 nineoldandroids
各种资源链接 nineoldandroids 任玉刚的五个图片滑动,点击menu http://blog.csdn.net/singwhatiwanna/article/details/1763998 ...
- Hibernate实体类注解解释
Hibernate注解1.@Entity(name="EntityName")必须,name为可选,对应数据库中一的个表2.@Table(name="",cat ...