分支界限算法 之单源最短路径
题目简述:
分支限界具体见百度。
分支界限算法核心思想:
在每次分支后,对凡是界限超出已知可行解值那些子集不再做进一步分支。这样,解的许多子集(即搜索树上的许多结点)就可以不予考虑了,从而缩小了搜索范围。
个人理解:
什么叫分支限界?演示如下:(以FIFO队列方法做演示)
1.将这个图转化成树的形式,如下所示:
创建队列。
1.节点1入队列,Q={1}。
我们取出队头节点,作为扩散节点,更新他的后代的值。
此题中更新节点2,3,4 的距离,并将他们加入队列,Q={1,2,3,4}。
完成后节点1出队。Q={2,3,4}。
2. 同样,重复1的步骤,Q={3,4,5,6};
3. 当我们取到节点3时,我们发现源点->节点3->节点6的距离为11,
大于 1-2-6 这条路径的权重,所以1-3-6这条路径之后我们不再考虑。
这就是“限界”(称为”剪枝“)的思想。
4. 重复步骤,直到Q为空。
优先队列法方法和FIFO方法类似,区别在于优先队列每次取队列元素中到源点距离最短的点。
# 初始化图参数 用字典初始初始化这个图
G = {
1: {