Description

  These are N cities in Spring country. Between each pair of cities there may be one transportation track or none. Now there is some cargo that should be delivered from one city to another. The transportation fee consists of two parts: 
The cost of the transportation on the path between these cities, and

a certain tax which will be charged whenever any cargo passing through one city, except for the source and the destination cities.

You must write a program to find the route which has the minimum cost.

 

Input

First is N, number of cities. N = 0 indicates the end of input.

The data of path cost, city tax, source and destination cities are given in the input, which is of the form:

a11 a12 ... a1N 
a21 a22 ... a2N 
............... 
aN1 aN2 ... aNN 
b1 b2 ... bN

c d 
e f 
... 
g h

where aij is the transport cost from city i to city j, aij = -1 indicates there is no direct path between city i and city j. bi represents the tax of passing through city i. And the cargo is to be delivered from city c to city d, city e to city f, ..., and g = h = -1. You must output the sequence of cities passed by and the total cost which is of the form:

 

Output

From c to d : 
Path: c-->c1-->......-->ck-->d 
Total cost : ...... 
......

From e to f : 
Path: e-->e1-->..........-->ek-->f 
Total cost : ......

Note: if there are more minimal paths, output the lexically smallest one. Print a blank line after each test case. 
//如果同时存在多条最短路径,按字典序选取最短路劲并且每个测试实例后输出一个空行

 

Sample Input

5
0 3 22 -1 4
3 0 5 -1 -1
22 5 0 9 20
-1 -1 9 0 4
4 -1 20 4 0
5 17 8 3 1
1 3
3 5
2 4
-1 -1
0
 

Sample Output

From 1 to 3 :
Path: 1-->5-->4-->3
Total cost : 21
From 3 to 5 :
Path: 3-->4-->5
Total cost : 16
From 2 to 4 :
Path: 2-->1-->5-->4
Total cost : 17  
  简单带路径保存的Floyd(新手没啥经验,不熟练,记下方便回味)
 #include <iostream>
#include <cstdio>
using namespace std;
const int MAXINT = <<;
int path[][];
int num[][];
int num1[];
int n;
void floyd()
{
for(int k= ; k<=n ; k++)
for(int i= ; i<=n ; i++)
for(int j= ; j<=n ; j++)
{
if(num[i][j] > (num[i][k]+num[k][j]+num1[k]) )
{
num[i][j] = num[i][k]+num[k][j]+num1[k];
path[i][j] = path[i][k];
}
else if(num[i][j] == num[i][k]+num[k][j]+num1[k])
{
if(path[i][j] > path[i][k])
{
path[i][j] = path[i][k];
num[i][j] = num[i][k]+num[k][j]+num1[k];
}
}//attention 当存在多条最短路时,选取后驱小的路
}
}
void print(int a,int b)
{
if(a == b)
{
printf("%d\n",b);
return;
}
printf("%d-->",a);
a=path[a][b];
print(a,b);
}//路径输出函数 int main()
{
int i,j,a,b;
while(scanf("%d",&n),n)
{
for(i= ; i<=n ; i++)
for(j= ; j<=n ; j++)
{
scanf("%d",&num[i][j]);
if(num[i][j]==-)
num[i][j]=MAXINT;
path[i][j]=j;//记后驱,方便输出
}
for(i= ; i<=n ; i++)
scanf("%d",&num1[i]);
floyd();
while(scanf("%d%d",&a,&b))
{
if(a == - && b == -)
break;
printf("From %d to %d :\n",a,b);
printf("Path: ");
print(a,b);
printf("Total cost : %d\n\n",num[a][b]);
}
}
return ;
}
 
 

ACM学习之路___HDU 1385(带路径保存的 Floyd)的更多相关文章

  1. ACM学习之路___HDU 5723(kruskal + dfs)

    Abandoned country Time Limit: / MS (Java/Others) Memory Limit: / K (Java/Others) Total Submission(s) ...

  2. ACM学习之路___HDU 2066 一个人的旅行

    Description 虽然草儿是个路痴(就是在杭电待了一年多,居然还会在校园里迷路的人,汗~),但是草儿仍然很喜欢旅行,因为在旅途中 会遇见很多人(白马王子,^0^),很多事,还能丰富自己的阅历,还 ...

  3. FastAPI 学习之路(八)路径参数和数值的校验

    系列文章: FastAPI 学习之路(一)fastapi--高性能web开发框架 FastAPI 学习之路(二) FastAPI 学习之路(三) FastAPI 学习之路(四) FastAPI 学习之 ...

  4. ACM学习之路————一个大整数与一个小整数不得不说得的秘密

    这个相对于两个大整数的运算来说,只能说是,low爆了. 只要利用好除法的性质,这类题便迎刃而解.O(∩_∩)O哈哈~ //大整数除一个int数 #include<iostream> #in ...

  5. ACM学习之路__HDU 1045

    Fire Net Description : Suppose that we have a square city with straight streets. A map of a city is ...

  6. ACM学习之路

     2018-10-18 11:03:00 今天开始踏上实现梦想的道路,希望自己不要懈怠. 坚持做简单的事,坚持下来就会变得不简单.

  7. FastAPI 学习之路(十三)Cookie 参数,Header参数

    系列文章: FastAPI 学习之路(一)fastapi--高性能web开发框架 FastAPI 学习之路(二) FastAPI 学习之路(三) FastAPI 学习之路(四) FastAPI 学习之 ...

  8. FastAPI 学习之路(十四)响应模型

    系列文章: FastAPI 学习之路(一)fastapi--高性能web开发框架 FastAPI 学习之路(二) FastAPI 学习之路(三) FastAPI 学习之路(四) FastAPI 学习之 ...

  9. FastAPI 学习之路(十九)处理错误

    系列文章: FastAPI 学习之路(一)fastapi--高性能web开发框架 FastAPI 学习之路(二) FastAPI 学习之路(三) FastAPI 学习之路(四) FastAPI 学习之 ...

随机推荐

  1. Eclipse配置Tomcat服务器

    Eclipse配置Tomcat服务器.. ---------------- ---------------- ---------------- ---------------- ----------- ...

  2. 递归调用里的性能问题(js)

    说明 这是在codewars.com上刷的一道js练习题,在此做个记录 问题描述 The Fibonacci sequence is traditionally used to explain tre ...

  3. HashMap 数组应用面试题(Point)

    今天看了一题面试题,以为很简单,不过自己写了遍,没有完全写出来: 题目是这样的: 给定一些 points 和一个 origin,从 points 中找到 k 个离 origin 最近的点.按照距离由小 ...

  4. HBRUSH to RGB value

    GetObject函数返回一个LOGBRUSH结构体,包含了COLORREF结构. LOGBRUSH lgbrush; COLORREF color; GetObject((HBRUSH)GetSto ...

  5. cmder修改默认打开路径

    win + alt + p //打开设置 选择Startup-Task,修改{cmd::Cmder}项,把: *cmd /k "%ConEmuDir%\..\init.bat" - ...

  6. python -- 装饰器的高级应用

    装饰器和装饰器模式装饰器模式是面向对象的一种设计模式,支持将行为动态增加到已经存在的对象上.当装饰一个对象的时候,就表示独立与其他类实例对象,为该对象扩展了新的功能. python的装饰器不是装饰器模 ...

  7. 拨开字符编码的迷雾--MySQL数据库字符编码

    拨开字符编码迷雾系列文章链接: 拨开字符编码的迷雾--字符编码概述 拨开字符编码的迷雾--编译器如何处理文件编码 拨开字符编码的迷雾--字符编码转换 拨开字符编码的迷雾--MySQL数据库字符编码 1 ...

  8. jmeter 实现登录一次,多次操作登录后的某一个功能

  9. cobbler实现自动安装

    author:JevonWei 版权声明:原创作品 cobbler 配置目录 配置文件目录 /etc/cobbler /etc/cobbler/settings : cobbler 主配置文件 /et ...

  10. 教你自己搭建linux邮箱服务器

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt290 现在网络中流行的电子邮件系统主要有Microsoft Exchange ...