题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1385

参考 http://blog.csdn.net/shuangde800/article/details/8075165

题目大意:

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

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

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

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

解析:

直接跑一边Floyd算法就好    用一个二维数组保存路径path[ i ][ j ]表示第i个节点到第j个节点经过的第一个点(例如1->2->5->4,path[1][4]=2,path[2][4]=5,path[5][4]=5)

AC代码

  1. #include <stdio.h>
  2. #include <math.h>
  3. #include <string.h>
  4. #include <stdlib.h>
  5. #include <iostream>
  6. #include <sstream>
  7. #include <algorithm>
  8. #include <string>
  9. #include <queue>
  10. #include <map>
  11. #include <vector>
  12. using namespace std;
  13. const int maxn = ;
  14. const int maxm = 1e4+;
  15. const int inf = 0x3f3f3f3f;
  16. const double epx = 1e-;
  17. typedef long long ll;
  18. int n;
  19. int w[maxn][maxn];
  20. int path[maxn][maxn];
  21. int tax[maxn];
  22. void init()
  23. {
  24. for(int i=;i<=n;i++)
  25. {
  26. for(int j=;j<=n;j++)
  27. {
  28. if(i!=j)
  29. w[i][j]=inf;
  30. else
  31. w[i][j]=; //自己到自己设为0
  32. path[i][j]=j;    //初始化为j
  33. }
  34. }
  35. }
  36. void Floyd()
  37. {
  38. for(int k=;k<=n;k++)
  39. for(int i=;i<=n;i++)
  40. for(int j=;j<=n;j++)
  41. if(w[i][k]!=inf&&w[k][j]!=inf)
  42. {
  43. int temp=w[i][k]+w[k][j]+tax[k]; //tax[]是过路费
  44. if(w[i][j]>temp) //松弛操作的时候,顺带更新路径
  45. {
  46. w[i][j]=temp;
  47. path[i][j]=path[i][k];
  48. }
  49. else if(w[i][j]==temp&&path[i][j]>path[i][k])//字典序最小,不要求字典序的话可直接省略
  50. {
  51. path[i][j]=path[i][k];
  52. }
  53. }
  54. }
  55. int main()
  56. {
  57. while(cin>>n&&n)
  58. {
  59. init();
  60. for(int i=;i<=n;i++)
  61. {
  62. for(int j=;j<=n;j++)
  63. {
  64. cin>>w[i][j];
  65. if(w[i][j]==-)
  66. w[i][j]=inf;
  67. }
  68. }
  69. for(int i=;i<=n;i++)
  70. cin>>tax[i];
  71. Floyd();
  72. int s,e;
  73. while(cin>>s>>e&&s!=-&&e!=-)
  74. {
  75. printf("From %d to %d :\n",s,e);
  76. printf("Path: ");
  77. int u=s;
  78. printf("%d",u); //打印路径
  79. while(u!=e)
  80. {
  81. printf("-->%d",path[u][e]);
  82. u=path[u][e];
  83. }
  84. printf("\n");
  85. printf("Total cost : %d\n\n",w[s][e]);
  86. }
  87.  
  88. }
  89. }

Floyd算法——保存路径——输出路径 HDU1385的更多相关文章

  1. Floyd算法并输出路径

    hdu1224 Free DIY Tour Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Ot ...

  2. SPFA和FLOYD算法如何打印路径

    早晨碰到了一题挺裸的最短路问题需要打印路径:vijos1635 1.首先说说spfa的方法: 其实自己之前打的最多的spfa是在网格上的那种,也就是二维的 一维的需要邻接表+queue 以及对于que ...

  3. ZOJ 1456 Minimum Transport Cost(Floyd算法求解最短路径并输出最小字典序路径)

    题目链接: https://vjudge.net/problem/ZOJ-1456 These are N cities in Spring country. Between each pair of ...

  4. Floyd最短路(带路径输出)

    摘要(以下内容来自百度) Floyd算法又称为插点法,是一种利用动态规划的思想寻找给定的加权图中多源点之间最短路径的算法,与Dijkstra算法类似. 该算法名称以创始人之一.1978年图灵奖获得者. ...

  5. URAL 1004 Sightseeing Trip(floyd求最小环+路径输出)

    https://vjudge.net/problem/URAL-1004 题意:求路径最小的环(至少三个点),并且输出路径. 思路: 一开始INF开大了...无限wa,原来相加时会爆int... 路径 ...

  6. [Python] 弗洛伊德(Floyd)算法求图的直径并记录路径

    相关概念 对于一个图G=(V, E),求图中两点u, v间最短路径长度,称为图的最短路径问题.最短路径中最长的称为图的直径. 其中,求图中确定的某两点的最短路径算法,称为单源最短路径算法.求图中任意两 ...

  7. Codefroces Gym101572 I.Import Spaghetti-有向图跑最小环输出路径(Floyd)

    暑假学的很多东西,现在都忘了,补这道题还要重新学一下floyd,有点难过,我暑假学的东西呢??? 好了,淡定,开始写题解. 这个题我是真的很难过啊,输入简直是有毒啊(内心已经画圈诅咒出题人无数次了.. ...

  8. 最小路径算法(Dijkstra算法和Floyd算法)

    1.单源点的最短路径问题:给定带权有向图G和源点v,求从v到G中其余各顶点的最短路径. 我们用一个例子来具体说明迪杰斯特拉算法的流程. 定义源点为 0,dist[i]为源点 0 到顶点 i 的最短路径 ...

  9. HD1385Minimum Transport Cost(Floyd + 输出路径)

    Minimum Transport Cost Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/O ...

随机推荐

  1. andorid IOS 判断APP下载

    <?phpif(strpos($_SERVER['HTTP_USER_AGENT'], 'iPhone')||strpos($_SERVER['HTTP_USER_AGENT'], 'iPad' ...

  2. WPF学习09:数据绑定之 Binding to List Data

    从WPF学习03:Element Binding我们可以实现控件属性与控件属性的绑定. 从WPF学习07:MVVM 预备知识之数据绑定 我们可以实现控件属性与自定义对象属性的绑定. 而以上两个功能在实 ...

  3. 用vue写的移动端车牌号输入法

    效果图: (录制了视频演示,然而不会上传.....心塞.....) 本页面所在项目已上传GitHub,github下载地址:https://github.com/dan-Zd/car-vueapp  ...

  4. ESSENTIALS OF PROGRAMMING LANGUAGES (THIRD EDITION) :编程语言的本质 —— (一)

    # Foreword> # 序 This book brings you face-to-face with the most fundamental idea in computer prog ...

  5. AIX6.1平台11.2.0.3RAC 实施手册

    1 前言 此文档详细描述了Oracle 11gR2 数据库在AIX6.1上的安装RAC的检查及安装步骤.文档中#表示root用户执行,$表示grid或oracle用户执行. 2 系统环境 操作系统环境 ...

  6. formSelects-v4.js 基于Layui的多选解决方案

    https://hnzzmsf.github.io/example/example_v4.html

  7. zabbix4.2学习笔记--监控tomcat

    zabbix提供了一个java gateway的应用去监控jmx(Java Management Extensions,即Java管理扩展)是一个为应用程序.设备.系统等植入管理功能的框架 环境 主机 ...

  8. tensorflow ConfigProto

    tf.ConfigProto一般用在创建session的时候.用来对session进行参数配置 with tf.Session(config = tf.ConfigProto(...),...)#tf ...

  9. iOS视频通话方案

    现在iPhone4平台上实时音视频对话已取得初步成果.其间查阅了很多资料,感谢这些信息的提供者.继往开来,我写下此文.我只列出要点,具体编码以及平台移植各位自己去努力吧.照着下面的步骤,您一定能做出来 ...

  10. Java中Date类型的工具类

    package com.mytripod.util; import java.text.DateFormat; import java.text.SimpleDateFormat; import ja ...