HDU 1385 Minimum Transport Cost(Floyd 最短路 打印路径)

HDU
1385

大意:

有N个城市,然后直接给出这些城市之间的邻接矩阵,矩阵中-1代表那两个城市无道路相连,其他值代表路径长度。

如果一辆汽车经过某个城市,必须要交一定的钱(可能是过路费)。

现在要从a城到b城,花费为路径长度之和,再加上除起点与终点外所有城市的过路费之和。

求最小花费,如果有多条路经符合,则输出字典序最小的路径。

思路:

Floyd求最短路,打印路径即可。

 1 /*------------------------------------------------------------------*/
2
3 const int maxn = 1000;
4 int n, s, e;
5 int path[maxn][maxn];
6 int b[maxn];
7 int rode[maxn][maxn];
8
9 void Solve()
10 {
11 while(~scanf("%d", &n) && n)
12 {
13 for(int i = 1; i <= n; ++i)
14 {
15 for(int j = 1; j <= n; ++j)
16 {
17 scanf("%d", &path[i][j]);
18 if(path[i][j] == -1)
19 {
20 path[i][j] = INF;
21 }
22 rode[i][j] = j;
23 }
24 }
25 for(int i = 1; i <= n; ++i)
26 {
27 scanf("%d", &b[i]);
28 }
29 for(int k = 1; k <= n; ++k)
30 {
31 for(int i = 1; i <= n; ++i)
32 {
33 for(int j = 1; j <= n; ++j)
34 {
35 if(path[i][k]+path[k][j]+b[k] < path[i][j])
36 {
37 path[i][j] = path[i][k]+path[k][j]+b[k];
38 rode[i][j] = rode[i][k];
39 }
40 else if(path[i][j] == path[i][k]+path[k][j]+b[k] && rode[i][j] > rode[i][k])
41 {
42 rode[i][j] = rode[i][k];
43 }
44 }
45 }
46 }
47 while(~scanf("%d%d", &s, &e))
48 {
49 if(s == -1 && e == -1)
50 break;
51 printf("From %d to %d :\nPath: %d", s, e, s);
52 int u = s, v = e;
53 while(s != e)
54 {
55 printf("-->%d", rode[s][e]);
56 s = rode[s][e];
57 }
58 printf("\n");
59 printf("Total cost : %d\n\n", path[u][v]);
60 }
61 }
62 }
63
64 /*------------------------------------------------------------------*/

HDU 1385

HDU 1385 Minimum Transport Cost(Floyd 最短路 打印路径),布布扣,bubuko.com

时间: 2024-12-24 04:03:46

HDU 1385 Minimum Transport Cost(Floyd 最短路 打印路径)的相关文章

HDU - 1385 Minimum Transport Cost(floyd+字典序)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1385 题意:给出一个邻接矩阵(对应位置的值代表两个顶点之间的花费),并且到达另外一个位置还要加上那个位置对应的额外花费. 然后求出最少的花费和起点到终点的路径(如果两条路径花费一样,求出字典序最小的) 求任意两点间的最小花费,一般都采用Floyd.Floyd就是一个简单的dp思想,在用Floyd的时候记录一下路径就可以了. 这里要求字典序,可以在路径相等的时候再次进行判断一下,取小的顺序. 1 #i

HDU 1385 Minimum Transport Cost 最短路径题解

本题就是使用Floyd算法求所有路径的最短路径,并且需要保存路径,而且更进一步需要按照字典顺序输出结果. 还是有一定难度的. Floyd有一种很巧妙的记录数据的方法,大多都是使用这个方法记录数据的. 不过其实本题数据不是很大,一般太大的数据也无法使用Floyd,因为效率是O(N^3). 所以其实也可以使用一般的Floyd算法,然后增加个三维数组记录数据.下面就是这种做法,0ms过了. #include <stdio.h> #include <vector> using std::v

HDU 1385 Minimum Transport Cost (字典序打印最短路)

题意  给你一个无向图的邻接矩阵  和途径每个点需要的额外花费首尾没有额外花费  求图中某两点之间的最短路并打印字典序最小路径 要求多组点之间的就用floyd咯  打印路径也比较方便  nex[i][j]表示从i点到j点最短路的第一个途经点  那么如果路径中加入一个节点k后 nex[i][j]应该更新为nex[i][k]  因为要途径k了 #include<cstdio> #include<cstring> using namespace std; const int N = 10

hdu 1385 Minimum Transport Cost (Floyd + 字典序打印路径)

Minimum Transport Cost Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 7822    Accepted Submission(s): 2028 Problem Description These are N cities in Spring country. Between each pair of cities

HDU1385 Minimum Transport Cost(最短路输出路径)

题意:先给你一张你n * n的图,代表城市间的距离,然后,给出n个tax的费用,然后很多询问,问你a到b的最少费用,并且打印路径(字典序) 注意tax的费用起点和终点不算 逆序spfa: #include<iostream> #include<deque> #include<vector> #include<algorithm> #include<list> #include<cstdio> using namespace std;

HDU - 1385 Minimum Transport Cost(最短路+最小字典序路径)

题目大意:有N个村庄.过村庄时需要交一定的费用.现在问从村庄A,要运一批货物到村庄B,怎样走才能使费用达到最小,起始和终点都不用缴费 解题思路:这题借鉴了别人的思路,用字符串存储路径. 其实不用字符串也是可以处理的 #include <cstdio> #include <cstring> #include <queue> using namespace std; #define N 105 #define INF 0x3f3f3f3f struct Node { cha

hdu 1385 Minimum Transport Cost

BFS注意字典序的问题.WA了好多发. #include<stdio.h> #include<math.h> #include<string.h> #include<vector> #include<algorithm> using namespace std; const int maxn = 70; int n, cost[maxn][maxn],bb[maxn], ji[maxn]; struct abc{ int node, fei; i

HDOJ 1385 Minimum Transport Cost

Minimum Transport Cost Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 7007    Accepted Submission(s): 1791 Problem Description These are N cities in Spring country. Between each pair of cities

Minimum Transport Cost Floyd 输出最短路

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