TOJ1837 Minimum Transport Cost floyd
发布日期:2021-05-16 16:51:55 浏览次数:28 分类:原创文章

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

1837: Minimum Transport Cost

描述

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.

输入

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:

输出

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.

样例输入

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

样例输出

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

花费一样的,要记录字典序小的。

#include<stdio.h>#include<string.h>#include<math.h>#include<iostream>#include<string>#include<algorithm>#include<map>#include<set>#include<queue>#include<vector>using namespace std;#define inf 0x3f3f3f3f#define LL long longint a[1005][1005],b[1005]; int pre[1005][1005];//路径 int main(){	int n,i,j,k,x,y;	while(scanf("%d",&n))	{		if(n==0)break;		memset(pre,-1,sizeof(pre));		for(i=1;i<=n;i++)		{			for(j=1;j<=n;j++)			{				scanf("%d",&a[i][j]);				 if(a[i][j]==-1)     				a[i][j]=inf;			}		}		for(i=1;i<=n;i++)		scanf("%d",&b[i]);			    for(i=1;i<=n;i++)	    {	        for(j=1;j<=n;j++)	        {	            pre[i][j]=j;	        }	    }        for(k=1;k<=n;k++)        {            for(i=1;i<=n;i++)            {                for(j=1;j<=n;j++)                {                    if(a[i][j]>a[i][k]+a[k][j]+b[k])                    {                        a[i][j]=a[i][k]+a[k][j]+b[k];                        pre[i][j]=pre[i][k];                    }                    else if(a[i][j]==a[i][k]+a[k][j]+b[k])                    {                        if(pre[i][j]>pre[i][k])                        {                            a[i][j]=a[i][k]+a[k][j]+b[k];                            pre[i][j]=pre[i][k];                        }                    }                 }            }        }				while(scanf("%d%d",&x,&y)!=EOF)		{			if(x==-1&&y==-1)break;			printf("From %d to %d :\n",x,y);            if(x==y)            {                printf("Path: %d\n",x);            }            else            {                printf("Path: %d",x);                int t=x;                while(t!=y)                {                	printf("-->%d",pre[t][y]);                    t=pre[t][y];                }                printf("\n");            }            printf("Total cost : %d\n\n",a[x][y]);		}	}}

 

上一篇:TOJ3184 Mine sweeping dfs
下一篇:HDU 1045 Fire Net 二分图最大匹配

发表评论

最新留言

做的很好,不错不错
[***.243.131.199]2025年04月27日 14时31分35秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

PHP系列:使用PHP实现登录注册功能的完整指南 2023-01-23
Python&aconda系列:cmd/powershell/anaconda prompt提示“系统找不到指定的路径”(亲测有效) 2023-01-23
Python&aconda系列:conda踩坑记录2.UnsatisfiableError: The following specifications were found to be incompa 2023-01-23
Python&aconda系列:Jupyter Notebook快速上手、深度学习库PyTorch安装 2023-01-23
Python&aconda系列:(W&L)Conda使用faiss-gpu报错及解决办法、安装numpy的坑、cmd执行Python脚本找不到第三方库、安装tensorflow-gpu时遇到的from 2023-01-23
python&anconda 系列:Pycharm在debug问题的N种解决方案(一般程序、web方向、人工智能方向) 2023-01-23
python&anconda系列(亲测有效):tensorflow AttributeError: ‘str’ object has no attribute ‘decode’ 2023-01-23
python&anconda系列:tf.keras.backend.get_session()和keras.backend.get_会话()返回不同的会话对象(待解答) 2023-01-23
"WARNING: Increasing RAM size to 1GB" and "Cannot set up guest memory 'xxx.ram': Invalid argument". 2023-01-23
#if 0 #elif 1 #else #endif 用法 2023-01-23
#include <gdiplus.h>出错 2023-01-23
$ajax({}).done 和 $ajax({}) success 区别 2023-01-23
'ascii' codec can't encode characters in position 0-4: ordinal not in range(128) 2023-01-23
(反射+内省机制的运用)处理jdbc的结果集 2023-01-23
(反射+内省机制的运用)简单模拟spring IoC容器的操作 2023-01-23
#C8# UVM中的factory机制 #S8.2.3# 重载 component 哪些情形 2023-01-23
(转)SQLServer全局变量 2023-01-23
(转)tomcat7.0 manager app和host manager web管理 2023-01-23
(转)【英雄会即时报道】五大CTO畅谈软件公司如何招聘技术人才 2023-01-23
(转)使用公用表表达式的递归查询(SQLSERVER2005) 2023-01-23