目录

动态规划法的基本思想

多段图的基本想法

代码块(Java)

运行结果


动态规划法的基本思想:

  1. 将大问题划分成若干个小问题进行解决,从而一步步获取最优解
  2. 动归从上到下分析问题,从下到上解决问题
  3. 动归与分治法相似,其基本思路都是将待求问题分解成若干个子问题,先求解子问题,再从子问题中找到原问题的解
  4. 动归与分治法不同之处:动归的子问题不是相互独立的,他们之间往往存在依赖关系,而分治法的子问题都是相互独立的

多段图的基本想法:

从源点出发,找出一条到达终点时权值最小的路径

下标

1

2

3

4

5

6

7

8

9

元素值

4

2

3

8

7

10

13

13

16

状态转移

0->1

0->2

0->3

2->4

3->5

2->6

4->7

5->8

8->9

代码块(Java):

const int MAX=1000;  //假定边上的权值最大不超过1000
#define N 10
int arc[10][10]
int CreatGraph()
{//创建图
int i,j,k;
int weight; //权值
int vnum,arcnum;  //vnum为顶点个数,arcnum为边数
cout<<"请输入顶点的个数和边数:";
cin>>vnum>>arcnum;
for(i=0;i<vnum;i++)   //初始化图的代价矩阵,将每一个都设为无穷
for(j=0;j<vnum;j++)arc[i][j]=MAX;
for(k=0;k<arcnum;k++)  //建立图的代价矩阵,将两点之间有边的填入他们所对应的权值
{
cout<<"请输入两个顶点和他们所对应的权值";
cin>>i>>j>>weight;
arc[i][j]=weight; //有边,填入权值
}
cout<<"已初始化完多段图!";
return vnum; //返回顶点个数
}
int BackPath(int n) {int i,j,temp;int cost[N],path[N]; //cost数组存储路径长度,path存储路径for(i=1;i<n;i++) { //初始化第1个到第n个顶点的路径长度cost为无穷,路径path为-1cost[i]=MAX; path[i]=-1; }cost[0]=0;path[0]=-1; // path[0]=-1表示顶点0为起点for(j=1;j<n;j++) { //填表for(i=j-1;i>=0;i--) { //i是j的前驱,考察所有入边if(arc[i][j]+cost[i]<cost[j]) { //找出到达j的最短路径长度和前驱cost[j]=arc[i][j]+cost[i]; //记录最短的路径长度path[j]=i; //记录前驱的下标}}}
//输出最短路径cout<<n-1; //输出终点i=n-1;while(path[i]>=0) { //依次输出path[i],path[i]<0说明已到达多段图的起点cout<<"<-"<<path[i]);i=path[i]; //找到路径上顶点i的前一个顶点}return cost[n-1]; //返回最短路径长度
}

运行结果:

动态规划法——多段图的最短路径相关推荐

  1. 算法-动态规划2图问题-多段图的最短路径问题

    算法-动态规划2-多段图的最短路径问题 多段图的最短路径问题 问题:设图G=(V,E)是一个带权有向图,如果把顶点集合V划分成k个互不相交的子集Vi(2<=k<=n,1<=i< ...

  2. 动态规划中的多段图问题

    多段图的最短路径问题:只有相邻的节点之间有联系 多段图的定义: 1.多段图是一个有向.无环.带权 图. 2.有且仅有一个起始结点(原点source) 和 一个终止结点(汇点target). 3.它有n ...

  3. 动态规划求解多段图最短路径

    动态规划求解多段图最短路径 题目: 分析见源代码注释 源代码: #include<stdio.h> #define N 10//定义定点数,编号从1开始 #define M 5//定义层数 ...

  4. 动态规划多段图和货郎担问题

    一.实验目的 1.掌握能用动态规划方法求解的问题应满足的条件: 2.加深对动态规划方法的理解与应用: 3.锻炼学生对程序跟踪调试能力: 4.通过本次实验的练习培养学生应用所学知识解决实际问题的能力. ...

  5. 沃舍尔算法_[数据结构拾遗]图的最短路径算法

    前言 本专题旨在快速了解常见的数据结构和算法. 在需要使用到相应算法时,能够帮助你回忆出常用的实现方案并且知晓其优缺点和适用环境.并不涉及十分具体的实现细节描述. 图的最短路径算法 最短路径问题是图论 ...

  6. 多段图的动态规划算法(C/C++)

    1. 实验环境 (1)Visual Studio 2019(32位调试器) (2)Windows 10 2. 多段图描述 多段图G = (V,E)是一个带权有向图,它具有以下特性: 图中的节点被划分成 ...

  7. 网状结构(图)图的存储(邻接矩阵、邻接表)、图的遍历(深度DFS、广度BFS)、图的最短路径

    图 多对多关系 是一种网状数据结构,图是由非空的顶点集合和一个描述顶点之间关系的集合组成 其定义 Graph = (V, E) V={x | x ∈某个数据对象} E = {<u, v> ...

  8. 动态规划求解多段图问题

    动态规划求解多段图问题(非递归) 问题描述 求解思路 动态规划逆序解法 逆序实现代码 动态规划逆序解法 顺序实现代码 问题描述 如图所示,在A处有一水库,现需要从A点铺设一条管道到E点,边上的数字表示 ...

  9. 数据结构篇十九:图的最短路径

    图的最短路径 迪杰斯特拉算法 贝尔曼-福特算法 弗洛伊德算法 SPFA算法(中国西南交通大学段凡丁发明) 最短路径问题分为两类,一大类是求一个顶点到其余各顶点的最短路径问题,另一大类是求各个顶点间最短 ...

最新文章

  1. timeSetEvent
  2. python打开中文文件名_[请教]python的中文文件名处理
  3. 三十七、Sql 补充 | 数据库优化
  4. 人工智能、机器学习和深度学习的区别?
  5. Spring MVC 源码-初始化阶段
  6. 深入理解分布式消息队列
  7. java web服务 分层,java web分层之——三层架构
  8. android 索引怎么使用情况,android 數據庫查詢中使用索引-大幅提高數據庫操作速度...
  9. kotlin数据库_如何在Kotlin应用程序中使用Xodus数据库
  10. PHP与MySQL案例剖析_PHP与MySQL案例剖析
  11. ae连续流动的线条_贡献 | AE片头制作绝对经验
  12. 利用python制作的可视化批量文件后缀处理工具
  13. RefineDetLite:腾讯提出轻量级高精度目标检测网络
  14. 【BZOJ1061/3265】[Noi2008]志愿者招募/志愿者招募加强版 单纯形法
  15. exception(359): error C2220: 警告被视为错误 - 没有生成“object”文件
  16. 4Packet Tracer – 配置 VLAN
  17. 读《人脑连接组研究:脑结构网络和脑功能网络》
  18. C# dgv自动排序后,各种样式设定无效的解决办法
  19. 小麦苗健康检查脚本说明
  20. 物流服务器维护,物流企业网络维护与管理 Email邮件服务器的基本配置 任务3-3 创建电子邮件服务器.doc...

热门文章

  1. 怎么实现微信跳转外部浏览器从而生成微信跳转链接
  2. 全国计算机2级考试试题,综合全国计算机考试文管2级模拟试题.doc
  3. PotPlayer:不支持S/W HEVC(H265)解码 的解决办法
  4. 亚马逊广告API对接概述
  5. 分组密码的模式——ECB、CBC、CFB、OFB、CTR
  6. 奖项-MVP:MVP(微软最有价值专家)百科
  7. Dcloud 全栈之旅1-5 组件属性-事件@
  8. eclipse没有tomcat9.0
  9. 《QBQ问题背后的问题》读后感(pingping)
  10. Android Studio中快速接入百度OCR遇到的问题解决方法