问题:
方法一:分支限界法
算法分析: 算法从图G的源顶点v1和空优先队列开始,结点v1被扩展后,它的孩子结点v1、v2、v3被依次插入优先队列中,算法从优先队列中取出具备最小当前路长的结点作为当前扩展结点,并依次检查与当前扩展结点相邻的所有顶点。这个结点的扩展过程一直继续到活结点优先队列为空。
剪枝策略:由于图G中各边的权都是正数,结点所对应的当前路径长度也是解空间树中,以该结点为根的子树所有结点对应的路径长度的下界.在算法扩展结点的过程中,一旦发现一个结点的下解大于当前找到的最短路径长,则算法减去以该结点为根的子树。在算法中,利用结点间的控制关系进行剪枝。从源顶点v1出发,如果有两条不同路径到达图G的同一顶点N,由于两条路径的长度不同,因此可以将路径长度较长的路径所对应的以结点N为根的子树剪去。
解空间树:
伪代码:
void ShortestPaath(int v)
{//定义优先队列
priority_queue<MinHeapNode,vector<MinHeapNode>,less<MinHeapNode>>H;
//定义源结点v为初始扩展结点
MinHeapNode E;
E.i=v;
E.length=0;
dist