欢迎来到天天文库
浏览记录
ID:9878720
大小:93.50 KB
页数:9页
时间:2018-05-13
《分支限界法实现单源最短路径》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、算法分析与设计实验报告分支限界法实现单源最短路径班级:11计算机1学号:110104200109姓名:金李扬日期:5.221.问题描述以分支限界法实现单源最短路径1.以分支限界实现优先队列2.再以分支限界法的优先队列实现单元最短路径以该图为算法测试数据,获得链接矩阵如下:以-1代表无法到达的点-1234-1-1-1-1-1-1-1-1-13-172-1-1-1-1-1-1-1-1-1-192-1-1-1-1-1-1-1-1-1-12-1-1-1-1-1-1-1-1-1-1-133-1-1-1-1-1-1-1-11-13-1-1-1-1-1-1-1-1-1-151-1-1-1-1-1-1
2、-1-1-1-1-13-1-1-1-1-1-1-1-1-1-13-1-1-1-1-1-1-1-1-1-12-1-1-1-1-1-1-1-1-1-1-12.算法思想分支限界法基本思想:分支限界法常以广度优先或以最小耗费(最大效益)优先的方式搜索问题的解空间树。在分支限界法中,每一个活结点只有一次机会成为扩展结点。活结点一旦成为扩展结点,就一次性产生其所有儿子结点。在这些儿子结点中,导致不可行解或导致非最优解的儿子结点被舍弃,其余儿子结点被加入活结点表中。此后,从活结点表中取下一结点成为当前扩展结点,并重复上述结点扩展过程。这个过程一直持续到找到所需的解或活结点表为空时为止。算法步骤1.用
3、一极小堆来存储活结点表,其优先级是结点所对应的当前路长。2.算法从图G的源顶点s和空优先队列开始。结点s被扩展后,它的儿子结点被依次插入堆中。此后,算法从堆中取出具有最小当前路长的结点作为当前扩展结点,并依次检查与当前扩展结点相邻的所有顶点。如果从当前扩展结点i到顶点j有边可达,且从源出发,途经顶点i再到顶点j的所相应的路径的长度小于当前最优路径长度,则将该顶点作为活结点插入到活结点优先队列中。这个结点的扩展过程一直继续到活结点优先队列为空时为止。剪枝函数1.在算法扩展结点的过程中,一旦发现一个结点的下界不小于当前找到的最短路长,则算法剪去以该结点为根的子树。2.在算法中,利用结点间的
4、控制关系进行剪枝。从源顶点s出发,2条不同路径到达图G的同一顶点。由于两条路径的路长不同,因此可以将路长长的路径所对应的树中的结点为根的子树剪去。3.算法设计1.定义HEAPNODE结构体:typedefstructHeapNode{intleft,right;intweight;boolfriendoperator<(constHeapNode&a,constHeapNode&b){returna.weight>b.weight;}inti,length;HeapNode(){}HeapNode(intii,intl){i=ii;length=l;}};2.以堆实现优先队列类:#de
5、fineMAXN25500classpriority_queue{private:HeapNoder[MAXN];intlength;voidheap_adjust(ints,intm){HeapNoderc=r[s];for(intj=s<<1;j<=m;j<<=1){if(j6、){for(inti=length>>1;i>0;i--){heap_adjust(i,length);}}voidset_size(intlength){this->length=length;}voidset_value(intid,HeapNodevalue){r[id]=value;}voidheap_sort(){for(inti=length;i>1;i--){HeapNodetmp=r[1];r[1]=r[i];r[i]=tmp;heap_adjust(1,i-1);}}boolis_heap(){intlen=length>>1-1,j;if(len<1){if(len7、gth==18、9、(!(r[1]
6、){for(inti=length>>1;i>0;i--){heap_adjust(i,length);}}voidset_size(intlength){this->length=length;}voidset_value(intid,HeapNodevalue){r[id]=value;}voidheap_sort(){for(inti=length;i>1;i--){HeapNodetmp=r[1];r[1]=r[i];r[i]=tmp;heap_adjust(1,i-1);}}boolis_heap(){intlen=length>>1-1,j;if(len<1){if(len
7、gth==1
8、
9、(!(r[1]
此文档下载收益归作者所有