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

题目:

分析见源代码注释
源代码:

#include<stdio.h>
#define N 10//定义定点数,编号从1开始
#define M 5//定义层数
#define INF 0x3f3f3f
int graph[100][100];//图的链接矩阵
int num[5] = { 1,4,7,9,10 };//每一层对应的节点最大编号,用于区分每一层
int cost[N+1];//每一个节点从起点到该节点的最短距离
int pos[N + 1];//每一个节点对应最短距离的上一节点,用于后续输出最短路径
void map()
{int i,x;for (i = 0; i < M-1; i++)//对应每一层,从第二层开始{x = num[i] + 1;while (x <= num[i + 1])//每一层的每个节点{for (int j = 1; j <= 10; j++)//遍历与该节点有链接关系的上一层节点{if (graph[j][x] != 0){int y = graph[j][x] + cost[j];//该层节点与上一层节点间距离+起点到上一层的最短距离if (y < cost[x])//比较大小,求出起点到该节点的最短距离{cost[x] = y;pos[x] = j;}}}//printf("%d ", cost[x]);//输出每一个节点对应的最短路径代价x++;}}
}
void showpath()//输出最短路径
{int i = N,j=0;int a[M-1];while (i > 1){a[j++] = pos[i];i = pos[i];}printf("最短路径为:");for (i = M - 2; i >= 0; i--)printf("%d->", a[i]);printf("%d\n",N);
}
int main()
{for (int i = 1; i <= N; i++){cost[i] = INF;pos[i] = 1;}cost[1] = 0;pos[1] = 0;for (int i = 1; i <= N; i++)for (int j = 0; j <= N; j++)graph[i][j] = 0;graph[1][2] = 4; graph[1][3] = 2; graph[1][4] = 3;//初始化graph[2][5] = 10; graph[2][6] = 9;graph[3][5] = 6; graph[3][6] =7; graph[3][7] =10;graph[4][6] = 3; graph[4][7] =8;graph[5][8] = 4; graph[5][9] = 8;graph[6][8] = 9; graph[6][9] =6;graph[7][8] = 5; graph[7][9] = 4;graph[8][10] = 8; graph[9][10] = 4;map();showpath();printf("代价为:%d", cost[N]);return 0;
}

动态规划求解多段图最短路径相关推荐

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

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

  2. 在c语言中nextarc是什么意思,c语言求解多段图〔向前处理法〕.docx

    c语言求解多段图[向前处理法] #include#include#define Infinity 1000 //无穷大#define Max 45#define null 0 typedef stru ...

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

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

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

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

  5. 动态规划——多段图问题

    多段图问题 多段图问题是利用动态规划思想解决的经典问题之一,在日常生活中应用广泛. 问题描述 若存在一个有向加权图G,且G能分出起点和终点以及中间的n的阶段,求起点到终点的最短(长)距离. 分析设计 ...

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

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

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

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

  8. 数据结构和算法——用动态规划求解最短路径问题

    一.动态规划求解问题的思路     在<算法导论>上,动态规划的求解过程主要分为如下的四步: 描述最优解的结构 递归定义最优解的值 按自底向上的方式计算最优解的值 由计算出的结果构造一个最 ...

  9. 动态规划法——多段图的最短路径

    目录 动态规划法的基本思想 多段图的基本想法 代码块(Java) 运行结果 动态规划法的基本思想: 将大问题划分成若干个小问题进行解决,从而一步步获取最优解 动归从上到下分析问题,从下到上解决问题 动 ...

最新文章

  1. php在什么方面使用使用队列,你知道在什么情况下使用队列吗?
  2. linux内核cpu负载计算,CPU 负载 — The Linux Kernel documentation
  3. 表格c1等于a1加b1_中国最牛驾照,C1、B1、B2、A1、A2随便开,被称为万能的驾照!...
  4. assetbundle能不能删除_Addressable卸载单个资源的疑问
  5. ObjectAnimator实现菜单的弹出(扇形)
  6. swing JTable学习(七)—TableModelListener
  7. 超分辨率重建——关于YIQ空间
  8. 浅谈使用postman的CryptoJS.MD5加密带有中文(已进行unicode编码)以及url的字符串与md5在线加密工具加密不一致的原因,附加解决方法。
  9. 什么是表达能力?如何提高表达能力?
  10. magento 开发 -- 入门深入理解第五章 – Magento资源配置
  11. 如何使用前端css代码去掉百度地图左下角的图标
  12. pycharm出现 Pycharm this applicatation failed to start because it could not find or laod the qt 的解决办法
  13. Java进阶04-动态代理、类加载
  14. 用天球星座测量地球表面经纬度的方法
  15. 【洞见趋势】博睿数据创始人兼CTO孟曦东访谈实录:聊聊2023年重要战略技术趋势“可观测性”
  16. c语言中1e-10啥意思,【1e+10是多大的数?那个e是什么含义?】-1e-
  17. 江湖云RFID电子标签在珠宝行业的应用
  18. Base64加密算法原理、具体例子及Java代码
  19. Excel插件《CC办公助手》
  20. 计蒜客 T1015 c++

热门文章

  1. Jama.Matrix的学习
  2. 网易·周星驰·大话西游三周年
  3. 数组、结构体、指针的应用
  4. Riak学习(1):Linux Centos 下安装 Riak 服务
  5. Python家族全家福,看你到底有多少熟人?
  6. 【Axure视频教程】键盘控制元件移动
  7. 迅雷金融於菲发公开信,边缘计算、区块链是迅雷的“皇帝新衣”?
  8. 悲情天才Walter Pitts—计算神经学,控制论和人工智能的诞生
  9. 悲情天才Walter Pitts—计算神经学,控制论和人工智能的诞生 1
  10. 【操作系统】抢占与非抢占式调度