运筹学用matlab求最短路问题,北邮运筹学ch7- 最短路问题.ppt

北邮运筹学ch7- 最短路问题

运筹学 北京邮电大学 * §7.3 最短路问题 Shortest Path Problem Ch7 Graph and Network Page * of 14 最短路问题 有些问题,如选址、管道铺设时的选线、设备更新、投资、某些整数规划和动态规划的问题,也可以归结为求最短路的问题。因此这类问题在生产实际中得到广泛应用。 求最短路有两种算法,一是求从某一点至其它各点之间最短离的狄克斯屈拉(Dijkstra)算法;另一种是求网图上任意两点之间最短的矩阵算法。 最短路问题,就是从给定的网络图中找出一点到各点或任意两点之间距离最短的一条路 . 渡河问题 一老汉带了一只狼、一只羊、一棵白菜想要从南岸过河到北岸,河上只有一条独木舟,每次除了人以外,只能带一样东西;另外,如果人不在,狼就要吃羊,羊就要吃白菜,问应该怎样安排渡河,才能做到既把所有东西都运过河去,并且在河上来回次数最少?这个问题就可以用求最短路方法解决。 设:M—人 W—狼 S—羊 V—白菜 渡河方案共有10种,构造如下一个图,每条边的距离为1,问题变为求一条从MWSV到φ的最短路。 北岸 南岸 狄克斯屈拉(Dijkstra)标号算法 点标号:b(j) —起点vs到点vj的最短路长; 边标号:k(i,j)=b(i)+dij, 步骤:1.令起点的标号;b(s)=0。 先求有向图的最短路,设网络图的起点是vs,终点是vt ,以vi为起点vj为终点的弧记为(i,j),距离为dij 2.找出所有vi已标号vj未标号的弧集合 B={ (i,j) }如 果这样的弧不存在或vt已标号则计算结束; 3.计算集合B中弧k(i,j)=b(i)+dij的标号 4.选一个点标号 返回到第2步。 【例】求下图v1到v7的最短路长及最短路线 ① ② ③ ④ ⑤ ⑥ ⑦ 8 6 2 5 2 3 5 3 4 2 10 5 7 0 8 6 2 2 5 4 4 11 14 7 5 10 7 12 11 v7已标号,计算结束。从v1到v7的最短路长是 11 最短路线是:v1 v4 v6 v7 从上例知,只要某点已标号,说明已找到起点vs到该点的最短路线及最短距离,因此可以将每个点标号,求出vs到任意点的最短路线,如果某个点vj不能标号,说明vs不可达vj . 无向图最短路的求法 无向图最短路的求法只将上述步骤2改动一下即可。 点标号:b(i) —起点vs到点vj的最短路长; 边标号:k(i,j)=b(i)+dij, 步骤:1.令起点的标号;b(s)=0。 3.计算集合B中边标号:k[i,j]=b(i)+dij 4.选一个点标号: 返回到第2步。 2.找出所有一端vi已标号另一端vj未标号的边集合 B={ [i,j] }如果这样的边不存在或vt已标号则计算结束; 【例】求下图v1到各点的最短路及最短距离 ① ② ③ ④ ⑤ ⑥ ⑦ ⑧ 4 5 2 6 1 7 8 3 9 3 2 6 12 16 18 0 4 5 2 2 3 10 3 9 6 12 6 4 11 6 6 18 8 12 24 8 24 18 所有点都已标号,点上的标号就是v1到该点的最短距离,最短路线就是红色的链。 进入演示和练习 有负权的最短路算法 假设图中没有负回路。如下图是一条负回路,最短路权无下界。 ① ② ③ 3 -2 -2 当vi到vj之间没有弧连接时,令wij=+∞ 列表迭代计算: 设vs到vj经过vi到达vj,则vs到vj的最短距离为: 迭代: 【例】求下图v1到v8的最短路长及最短路线 0 -5 -3 v8 0 -1 v7 7 1 0 1 v6 0 -1 v5 3 2 0 v4 -2 1 -5 0 -3 v3 -1 2 0 6 v2 0 0 3 -2 -1 0 v1 k=4 k=3 k=2 k=1 v8 v7 v6 v5 v4 v3 v2 v1 wij + min= -5 + min= -2 -7 1 -1 5 0 + min= -5 -2 -7 -3 -1 -5 6 0 -5 -2 -7 -3 -1 -5 6 6 1-3-6-8 0 -5 -3 v8 -5 1-3-4-7 1-4-7 0 -1 v7 -1 1-3-6 1-3-6 7 1 0 1 v6 -3 1-3-2-5 1-2-5 0 -1 v5 -7 1-3-4 1-3-4 2 0 v4 -2 1-3 1-3 1-4 1 -5 0 -3 v3 -5 1-3-2 1-3-2 1-2 2 0 6 v2 0 1-1 1-1 1-1 3 -2 -1 0 v1 距离 路线 k=2 k=1 v8 v7 v6

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值