最短路径流程图及算法详解
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
最短路径流程图及算法详解-标准化文件发布号:(9456-EUATWK-MWUB-WUNN-INNUL-DDQTY-KII
:算法的设计思想
本算法采用分支定界算法实现。构造解空间树为:第一个城市为根结点,与第一个城市相邻的城市为根节点的第一层子节点,依此类推;每个父节点的子节点均是和它相邻的城市;并且从第一个根节点到当前节点的路径上不能出现重复的城市。
本算法将具有最佳路线下界的节点作为最有希望的节点来展开解空间树,用优先队列实现。算法的流程如下:从第一个城市出发,找出和它相邻的所有城市,计算它们的路线下界和费用,若路线下界或费用不满足要求,将该节点代表的子树剪去,否则将它们保存到优先队列中,并选择具有最短路线下界的节点作为最有希望的节点,并保证路径上没有回路。当找到一个可行解时,就和以前的可行解比较,选择一个较小的解作为当前的较优解,当优先队列为空时,当前的较优解就是最优解。算法中首先用Dijkstra算法算出所有点到代表乙城市的点的最短距离。算法采用的下界一个是关于路径长度的下界,它的值为从甲城市到当前城市的路线的长度与用Dijkstra算法算出的当前城市到乙城市的最短路线长度的和;另一个是总耗费要小于1500。
伪代码
算法AlgBB()
读文件m1和m2中的数据到矩阵length和cost中
Dijkstra(length)
Dijkstra(cost)
while true do
for i←1 to 50 do //选择和node节点相邻的城市节点
if shortestlength>optimal or mincost>1500
pruning
else
if i=50
optimal=min(optimal,tmpopt)//选当前可行解和
最优解的较小
值做最优解
else
if looped
//如果出现回路
pruning
//剪枝
else
将城市i插入到优先队列中
end for
while true do
if 优先队列为空
输出结果
else
取优先队列中的最小节点
if 这个最小节点node的路径下界大于当前的较优解
continue
end while
end while
算法流程图