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是最好的选择.因为其他三种最短路的算法都是单源 ...
随机推荐
- java-线程实现方式
实现方式: 1,继承Thread类 public class ThreadTest extends Thread { @Override public void run() { System.out. ...
- Vue项目环境搭建(node+webpack)
安装node.js 下载地址:https://nodejs.org/en/download/ node -v //查看node.js版本 项目环境配置: 安装vue-cli:npm install - ...
- java中使用ReentrantLock锁中的Condition实现三个线程之间通信,交替输出信息
本文直接附上源代码,如下是自己写的一个例子 面试题需求: 使用Condition来实现 三个线程 线程1 线程2 线程3 三个交替输出 [按照 线程1(main)-->线程2-->线程3] ...
- 云计算之路-阿里云上-容器难容:容器服务故障以及自建 docker swarm 集群故障
3月21日,由于使用阿里云服务器自建 docker swarm 集群的不稳定,我们将自建 docker swarm 集群上的所有应用切换阿里云容器服务 swarm 版(非swarm mode). 3月 ...
- beta冲刺4
昨天的问题: 我的社团数据库表项的处理,代码修改后结果无法显示. 帖子内容无法显示出来. 首页图像未替换 登陆整合没有完成 今天的完成: 服务器部署成功 页面背景修改.(已上传,未确认实装.) 任务截 ...
- beta冲刺2-咸鱼
q前言:今天晚上大概把github的的相关东西弄上了.然后把之前做的一些修改什么的也上传上去了.目测之后的话就是在自己这边改完然后直接上github那边去复制粘贴替换掉了. 昨天的问题:github这 ...
- 个人作业2:QQ音乐APP案例分析
APP案例分析 QQ音乐 选择理由:毕竟作为QQ音乐九年的资深老用户以及音乐爱好者 第一部分 调研 1.第一次上手的体验 我算是很早期的QQ音乐的用户,用QQ音乐七八年,除了体验各方面还不错之外 ...
- django模型——数据库(二)
模型--数据库(二) 实验简介 模型的一些基本操作,save方法用于把对象写入到数据库,objects是模型的管理器,可以使用它的delete.filter.all.order_by和update等函 ...
- 利用Python爬取新浪微博营销案例库并下载到本地
from bs4 import BeautifulSoup import requests,urllib.request,urllib.parse import json import time im ...
- 【iOS】跳转到设置页面
iOS8.0以后有效 定位服务 定位服务有很多APP都有,如果用户关闭了定位,那么,我们在APP里面可以提示用户打开定位服务.点击到设置界面设置,直接跳到定位服务设置界面.代码如下: 1 2 3 4 ...