博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(Floyd求最短路)Minimum Transport Cost (hdu1385)
阅读量:5905 次
发布时间:2019-06-19

本文共 2742 字,大约阅读时间需要 9 分钟。

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

Input

Output

Sample Input

Sample Output

Hint

 

#include <iostream>

using namespace std;

const int INF = 99999999; 

const int maxn = 1000;
int n, s, e;
int path[maxn][maxn];
int b[maxn];
int rode[maxn][maxn];

int main()

{int i,j,k;
    while(~scanf("%d", &n) && n)
    {
        for(i = 1; i <= n; ++i)
        {
            for(j = 1; j <= n; ++j)
            {
                scanf("%d", &path[i][j]);
                if(path[i][j] == -1)
                {
                    path[i][j] = INF;
                }
                rode[i][j] = j;
            }
        }
        for(i = 1; i <= n; ++i)
        {
            scanf("%d", &b[i]);
        }
        for(k = 1; k <= n; ++k)
        {
            for( i = 1; i <= n; ++i)
            {
                for(j = 1; j <= n; ++j)
                {
                    if(path[i][k]+path[k][j]+b[k] < path[i][j])
                    {
                        path[i][j] = path[i][k]+path[k][j]+b[k];
                        rode[i][j] = rode[i][k];
                    }
                    else if(path[i][j] == path[i][k]+path[k][j]+b[k] && rode[i][j] > rode[i][k])
                    {
                        rode[i][j] = rode[i][k];
                    }
                }
            }
        }
        while(~scanf("%d%d", &s, &e))
        {
            if(s == -1 && e == -1)
                break;
            printf("From %d to %d :\nPath: %d", s, e, s);
            int u = s, v = e;
            while(s != e)
            {
                printf("-->%d", rode[s][e]);
                s = rode[s][e];
            }
            printf("\n");
            printf("Total cost : %d\n\n", path[u][v]);
        }
    }
 return 0;
}

转载于:https://www.cnblogs.com/lengxia/p/4387798.html

你可能感兴趣的文章
The Shared folder with you
查看>>
sax方式解析XML学习笔记
查看>>
Springboot配置(上)
查看>>
java--Eclipse for mac 代码提示(代码助手,代码联想)快捷键修改
查看>>
left join on/right join on/inner join on/full join on连接
查看>>
template.helper 多参数
查看>>
Android 四大组件之一(Activity)
查看>>
扫描(一)
查看>>
Centos7安装rabbitmq server 3.6.0
查看>>
iostat命令学习
查看>>
html video的url更新,自动清缓存
查看>>
【11】ajax请求后台接口数据与返回值处理js写法
查看>>
Python菜鸟之路:Jquery Ajax的使用
查看>>
LeetCode算法题-Maximum Depth of Binary Tree
查看>>
Cox 教学视频5
查看>>
Jenkins持续集成学习-搭建jenkins问题汇总
查看>>
使用ffmpeg实现对h264视频解码 -- (实现了一个易于使用的c++封装库)
查看>>
flink watermark介绍
查看>>
Android Xutils 框架
查看>>
Sysbench 0.5版安装配置
查看>>