算法的思想:

分析题目要求,我们可以得知:算法要实现找到一条花费在1500元以下的最短的路径。其中这里面涉及两个变量,一个是路径的长度,要求最短。一个是花费,要求不大于1500元。基于这两个变量的不同的要求,本算法实现了两种分支限定的方法。对于”距离”变量,由于要求其最短,故使用优先级队列的分支限界法,可保证算法沿优先级最高(在这里也就是当前节点到起点距离最短的节点)向前进行搜索,这样就可以保证第一次搜索到达终点的路径,就是最短路径。对于”花费”变量,算法首先计算图中的每一个点到达终点的最少花费(使用的是改进的Floyd算法)。记录在minCost[51]数组中,对于当前正在搜索的节点,如果当前点到达起点的费用+当前点到达终点的费用之和大于1500元,则进行剪枝。除上述两个重要的思想外,本算法还使用动态规划的思想:也就是在搜寻过程中,若我们发现有两条路径可到达同一点,我们便可放弃到达那一点成本较高的路径而对这条路径停止搜寻。

算法中的使用的数据结构:

CArcItem:代表访问的城市,也就是状态空间树中的状态节点

class CArcItem

{

int

m_CityID;                      //当前访问的城市序号[1-50]

int

m_dDisToStart;                    //起始城市到当前访问城市的路径长度

int

m_dCostToStart;                  //起始城市到当前访问城市所需费用

CArcItem

* m_pParentArcItem;       //生成的最短路径树中的父节点

}

CPriorityQueu:优先级队列,采用二叉堆实现,对城市状态空间树中的状态节点(也就是城市)按照当前访问城市到起始城市的距离进行升序排序,使当前访问城市到起始城市的距离最小的节点始终在二叉堆的堆顶,也就是优先级最高。

minCost[51]数组:记录图中所有节点到达终点的最小花费。初始化在Floyd()方法中实现。

哈希表:DomSet:记录当前城市ID和当前城市到达起点城市”最小距离”,这里之所以加引号,是因为这个最小距离是随着搜索的进行而不断的减小的,也就是在搜寻过程中,若我们发现有两条路径可到达同一城市,我们便可放弃到达那一点成本较高的路径而对这条路径停止搜寻。

openTable保存所有已生成而未考察的节点,

closeTable记录已访问过的节点。

算法流程图:

程序主要代码

java 动态规划求最短路径_使用分支界定和动态规划解决最短路径问题(原)相关推荐

  1. python贪心算法最短路径_dijkstra算法(贪心算法)——解决最短路径问题

    最短路径 给定一张带权图和其中的一个点(作为源点),求源点到其余顶点的最短路径 基本思想 1)源点u,所有顶点的集合V,集合S(S中存有的顶点,他们到源点的最短路径已经确定,源点u默认在S中),集合V ...

  2. java中求立方根_求解立方根

    0 夹逼法==二分法 import java.util.Scanner; public class Main{ public static void main(String[] args){ Scan ...

  3. java合并后求和_用分支/合并框架执行并行求和

    分支/合并框架的目的是以递归方式将可以并行的任务拆分成更小的任务,然后将每个子任 务的结果合并起来生成整体结果.它是 ExecutorService 接口的一个实现,它把子任务分配给 线程池(称为 F ...

  4. java动态规划鸡蛋问题_教你彻底理解动态规划——扔鸡蛋问题 Drop Eggs2

    问题 有一个n层的建筑.如果一个鸡蛋从第k层及以上落下,它会碎掉.如果从低于这一层的任意层落下,都不会碎. 有m个鸡蛋,用最坏的情况下实验次数最少的方法去找到k, 返回最坏情况下所需的实验次数. 样例 ...

  5. java 编程求图形面积_求java编程,计算长方形面积?

    求java编程,计算长方形面积? mip版  关注:195  答案:2  悬赏:0 解决时间 2021-01-28 06:47 已解决 2021-01-27 08:26 求java编程,计算长方形面积 ...

  6. java 三边求面积_已知三角形的三边长如何求面积?

    展开全部 各类三角形求面积方式如下所示: 1.已知e69da5e6ba9062616964757a686964616f31333365666264三角形底a,高h,则 S=ah/2 2.已知三角形三边 ...

  7. java实现求最小公倍数_使用Java代码进行因数分解和求最小公倍数的示例

    因数分解 /* 因数分解是十分基本的数学运算,应用广泛.下面的程序对整数n(n>1)进行因数分解. 比如,n=60, 则输出:2 2 3 5.请补充缺失的部分. */ public class ...

  8. java数组求子集_回溯算法:求子集问题!

    给「代码随想录」一个星标吧! ❝ 认识本质之后,这就是一道模板题 给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集). 说明:解集不能包含重复的子集. 示例: 输入: nums ...

  9. java时间戳求时间差_时间戳换算后,截取时间相差8小时的问题

    今天在做工程的时候出现了一个问题:就是把我们平时常用的时间戳转换成时间格式,只需要后面的时间部分,不要年月日部分... 我的做法是先把时间戳转换成NSDate,再把NSDate转换成字符型,截取后面的 ...

最新文章

  1. Nature替宠物正名了:宝宝身体好,猫狗或真不可少!
  2. 多所“双一流”异地布局,新的王牌大学和高教城市将诞生?
  3. 动图-完整清晰展示TCP的三次握手与四次挥手
  4. linux系统的4个部分,以下是Linux文件系统的4个相关的结构定义中的一部分: Struct i..._考试资料网...
  5. stl string 函数_使用C ++ STL中的string :: append()函数将文本追加到字符串
  6. 6英寸全面屏·2000万四镜头 HUAWEI nova 2s正式发布
  7. 算法47----大数
  8. echarts 柱状图如何不顶格_echarts柱状图如何中间对齐而不是底部对齐?
  9. PLOS_ONE_Genome-Wide Analysis of Long Noncoding RNA (lncRNA) Expression in Hepatoblastoma Tissues
  10. 【渝粤教育】国家开放大学2018年春季 7067-22T康复护理学 参考试题
  11. 渗透杂记-2013-07-13 关于SMB版本的扫描
  12. PHP网站安装程序制作的原理、步骤、注意事项和示例代码
  13. 解决:网络风暴引起的无法ping通
  14. 【大数据处理技术】实验7(推荐林子雨老师的教程)
  15. hbase--索引概念(含二级索引)
  16. 七牛云存储java上传图片
  17. 高斯输出文件批量提取单点能:Shell脚本处理
  18. python五子棋游戏from tkinter import_Python tkinter制作单机五子棋游戏
  19. 机器学习之人脸识别(Face Recognition)
  20. m基于ESN+BP神经网络的数据预测算法matlab仿真,测试数据为太阳黑子变化数据

热门文章

  1. Intel保护机制:特权级别:Protection Rings
  2. 什么是MPLS?多协议标签交换
  3. srsLTE源码学习:RRC:(Radio Resource Control):无线资源控制协议
  4. Python Tuple:一文彻底粉碎元组
  5. python server酱_Python使用微信收取通知
  6. VUE3(setup响应式函数系统API)
  7. ElementUI组件库
  8. Django主从数据库分离配置
  9. 正在成为史上最全分类 Android 开源大全
  10. java ssl 加密传输_java线程之四 SSL加密传输