- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
? 一、实验名称:单源最短路径问题? 时间:X年X月X日,星期3,第三、四节? 地点:0#601? 二、实验目的及要求? 1、掌握分支限界法解题步骤:? 1在问题的边带权的解空间树中进行广度优先有哪些信誉好的足球投注网站??2找一个叶结点使其对应路径的权最小(最大)? 3当有哪些信誉好的足球投注网站到达一个扩展结点时,一次性扩展它的所有儿子? 4将满足约束条件且最小耗费函数?目标函数限界的儿子,插入活结点???表中? 5从活结点表中取下一结点同样扩展直到找到所需的解或活动结点表? ??为空为止? 三、实验环境? Window下的vs2010? 四、实验内容? 单源最短路径问题? 以一个例子来说明单源最短路径问题:在下图所给的有向图G中,每一边都有一个非负边权。? 求图G的从源顶点s到目标顶点t之间的最短路径? 五、算法描述及实验步骤? ?算法思想: 解单源最短路径问题的优先队列式分支限界法用一极小堆来存储活结点表。其优先级是结点所对应的当前路长。? ? 算法从图G的源顶点s和空优先队列开始。结点s被扩展后,它的儿子结点被依次插入堆中。? 算法每次从堆中取出具有最小当前路长的结点作为当前扩展结点,并依次检查与当前扩展结点相邻的所有顶点。? 如果从当前扩展结点i到j有边可达,且从源出发,途经i再到j的所相应路径长度,小于当前最优路径长度,则将该顶点作为活结点插入到活结点优先队列中。? 结点扩展过程一直继续到活结点优先队列为空时为止 二.单源最短路径问题? 1.问题描述? 下面以一个例子来说明单源最短路径问题:在下图所给的有向图G中,每一边都有一个非负边权。要求图G的从源顶点s到目标顶点t之间的最短路径。 下图是用优先队列式分支限界法解有向图G的单源最短路径问题产生的解空间树。其中,每一个结点旁边的数字表示该结点所对应的当前路长。 2.?算法思想? 解单源最短路径问题的优先队列式分支限界法用一极小堆来存储活结点表。其优先级是结点所对应的当前路长。 算法从图G的源顶点s和空优先队列开始。结点s被扩展后,它的儿子结点被依次插入堆中。此后,算法从堆中取出具有最小当前路长的结点作为当前扩展结点,并依次检查与当前扩展结点相邻的所有顶点。如果从当前扩展结点i到顶点j有边可达,且从源出发,途经顶点i再到顶点j的所相应的路径的长度小于当前最优路径长度,则将该顶点作为活结点插入到活结点优先队列中。? 这个结点的扩展过程一直继续到活结点优先队列为空时为止。 3.?剪枝策略? ? ?在算法扩展结点的过程中,一旦发现一个结点的下界不小于当前 找到的最短路长,则算法剪去以该结点为根的子树。?? ????在算法中,利用结点间的控制关系进行剪枝。从源顶点s出发,2条不同路径到达图G的同一顶点。由于两条路径的路长不同,因此可以将路长长的路径所对应的树中的结点为根的子树剪去。?? ? 下图是用优先队列式分支限界法解有向图G的单源最短路径问题产生的解空间树的剪枝情况。 三.程序设计: #includeiostream using namespace std; const int size = 100; const int inf = 5000; //两点距离上界 //第一组测试参数 const int n = 6; //图顶点个数加1 int prev[n]; //图的前驱顶点 int dist[] = {0,0,5000,5000,5000,5000}; //最短距离数组 int c[n][n] = {{0,0,0,0,0,0},{0,0,2,3,5000,5000}, //图的邻接矩阵 {0,5000,0,1,2,5000},{0,5000,5000,0,9,2}, {0,5000,5000,5000,0,2},{0,5000,5000,5000,5000,0}}; /*第二组测试参数 const int n = 5; //图顶点个数加1 int prev[n]; //图的前驱顶点 int dist[] = {0,0,5000,5000,5000}; int c[][n]={{0,0,0,0,0},{0,0,2,3,5000},{0,5000,0,1,2},{0,5000,5000,0,9},{0,5000,5000,5000,0} }; */ class MinHeapNode { public : int i; //顶点编号 int length; //当前路长 }; //循环队列 class CirQueue { private: int front,rear; MinHeapNode data[size]; public: CirQueue() { front = rear = 0; } //元素
文档评论(0)