动态规划法(五)——多段图问题
来源:互联网 发布:javascript高级编程 编辑:程序博客网 时间:2024/06/06 18:01
问题描述
给定一个多段图,求出多段图中的最短路径和最短路径长度。
什么是多段图?
- 多段图是一个有向、无环、带权 图。
- 有且仅有一个起始结点(原点source) 和 一个终止结点(汇点target)。
- 它有n个阶段,每个阶段由特定的几个结点构成。
- 每个结点的所有结点都只能指向下一个相邻的阶段,阶段之间不能越界。
数据结构
- cost数组:
该数组用于记录以某个结点为起点,到终点t的最短路径长度值。
数组的下标表示结点的编号(因此所有结点都必须从0开始依次编号),数组的值表示:以该结点为起点,到终点的最短路径长度。 - d数组:
该数组用于记录最短路径中出现的所有结点。
下标表示结点的编号,d[i]表示:结点i的后继结点编号。
算法思路
算法流程
- 从前往后依次给所有结点编号;序号必须从0开始,依次递增,同一阶段的结点顺序可以随意;
- 创建数组cost和d,分别记录每个结点的最短路径长度 和 每个结点最短路径的前驱结点;
- 从最后一个结点开始,从后向前,依次计算每个结点的cost值和d值;
- 直到将所有结点都计算完毕后,即可得到最短路径。
每个结点cost和d的计算方法
设当前要计算cost[i]的值。
- 找到i结点所有的出边,假设出边的终点分别是a、b、c,边上的权值分别是w1、w2、w3;
- 分别计算w1+cost[a]、w2+cost[b]、w3+cost[c],将其中最小的那个值作为cost[i];并将最小的那个后继结点作为d[i]。
0 1
- 动态规划法(五)——多段图问题
- 五大常用算法——动态规划
- 五大常用算法之二——动态规划
- 五大常用算法——动态规划
- 0-1背包问题——动态规划法
- 最长公共子序列问题—— 动态规划法
- 动态规划法——求解0-1背包问题
- 动态规划法——最长公共子序列问题
- 动态规划法——求解0-1背包问题
- 动态规划法(四)——0/1背包问题
- 动态规划法—0-1背包问题(一)
- 动态规划法—0-1背包问题(二)
- 动态规划——货郎担问题
- 动态规划——背包问题变形
- 动态规划——找零钱问题
- 动态规划——漂亮打印问题
- 动态规划——01背包问题
- 动态规划——LCS问题
- TCP/IP协议各层数据格式及首部含义
- ubuntu下navicat试用到期解决办法(删除system.reg之后navicat不能运行解决办法)
- ListView的头部添加react-native-swiper不显示的问题
- VS2013 warning LNK4099:未找到 PDB“vc120.pdb”xxxx 问题解决方案
- 悲观锁和乐观锁的理解
- 动态规划法(五)——多段图问题
- eclipse 运行java程序报错 “错误: 找不到或无法加载主类 ”
- 关于kittle启动中异常关闭的解决方案——批处理方式解决
- ResNeXt
- MySQL开发实践8问,你能hold住几个?
- PreferenceFragment详解
- 如何在Linux上搭建android-studio
- setTimeout和setInterval的区别
- Android Shader渲染以及实现水波纹霓虹文字雷达等效果