数学建模floyd算法最短路算法详解
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
d i ( 1 ) 是 j从 v i 到 v j 的 只 允 许 以 v 1 作 为 中 间 点 的 路 径 中 最 短 路 的 长 度 .
( 2 ) D ( 2 ) = ( d i ( 2 ) j ) , 其 中 d i ( 2 ) j m d i ( 1 ) , jd i i ( 2 1 ) d n 2 ( 1 j ) } {
算法原理—— 查找最短路路径的方法 若 rij( ) p1,则点 p1 是点 i 到点 j 的最短路的中间点.
然 后 用 同 样 的 方 法 再 分 头 查 找 . 若 :
( 1 ) 向 点 i 追 朔 得 : r i ( 1 ) p p 2 , r i ( 2 ) p p 3 , … , r i ( k ) p p k ( 2 ) 向 点 j 追 朔 得 : r p ( 1 j ) q 1 , r q ( 1 j ) q 2 , … r , q ( m j ) j
( 1 ) 赋 初 值 :
对 所 有 i , j , d ( i , j ) w ( i , j ) , r ( i , j ) j , k 1 ( 2 ) 更 新 d ( i , j ) , r ( i , j ) 对 所 有 i , j , 若 d ( i , k ) + d ( k , j ) < d ( i , j ) , 则 wk.baidu.com ( i , j ) d ( i , k ) + d ( k , j ) , r ( i , j ) k
算法原理—— 求路径矩阵的方法
在建立距离矩阵的同时可建立路径矩阵R.
R = ( r i ) , j r i j 的 含 义 是 从 v i 到 v j 的 最 短 路 要 经 过 点 号 为 r i j 的 点 .
R ( 0 ) ( r i ( 0 ) ) , r j i ( 0 ) j j
则由点i到j的最短路的路径为: i,p k, ,p 2,p 1 ,q 1 ,q 2, ,q m ,j
i
pk
p3 p2 p1
q1
q2
qm
j
算法步骤
F l o y d
D ( i , j ) : i 到 j 的 距 离 . R ( i , j ) : i 到 j 之 间 的 插 入 点 . 输 入 : 带 权 邻 接 矩 阵 w ( i , j )
( 3 ) 若 k = , 停 止 . 否 则 k k + 1 , 转 ( 2 ) .
function [d,r]=floyd(w) n=length(w); for i=1:n
for j=1:n d(i,j)=w(i,j); r(i,j)=j;
end end for k=1:n
for i=1:n for j=1:n if d(i,k)+d(k,j)<d(i,j) d(i,j)=d(i,k)+d(k,j); r(i,j)=k; end end
0 3 5 10 7 5.5 7
3 0 2 7 4 2.5 4
5
2
0
5
2
4.5
6
D 10 7 5 0 3 7 8.5
7
4
2
3
0
4
5.5
5.5 2.5 4.5 7 4 0 1.5
7
4
6
8.5 5.5 1.5
0
S(v1)=10, S(v2)=7, S(v3)=6, S(v4)=8.5, S(v5)=7, S(v6)=7, S(v7)=8.5
S(v3)=6,故应将消防站设在v3处。
选址问题--重心问题
例 3 某 矿 区 有 七 个 矿 点 , 如 图 所 示 . 已 知 各 矿 点 每 天 的 产 矿 量
q ( v j) ( 标 在 图 的 各 顶 点 上 ) . 现 要 从 这 七 个 矿 点 选 一 个 来 建 造 矿 厂 . 问
算法原理—— 求距离矩阵的方法
把 带 权 邻 接 矩 阵 W 作 为 距 离 矩 阵 的 初 值 , 即 D ( 0 ) = ( d i ( 0 ) ) j= W
( 1 ) D ( 1 ) = ( d i ( 1 ) ) j , 其 中 d i ( 1 ) jm d i ( 0 ) , j d i ( 1 0 ) i d 1 ( 0 j ) } n{
每 求 得 一 个 D ( k ) 时 , 按 下 列 方 式 产 生 相 应 的 新 的 R ( k )
r i ( k ) j r i ( k k 1 j ) 若 d i ( k 1 j ) 否 d i ( k 1 k ) d k ( k 1 ) j 则
即当vk被插入任何两点间的最短路 径时,被记录在R(k)中,依次求 R() 时求得 D(,) 可由R() 来查找任何点对 之间最短路的路径.
m =132 78 70 92 70 106 130 ans =70
实验八、最佳灾情巡视路线(节选部分)
实验内容: 求出下图中O到其它各点的最短路线(要求求
出最短路线及其最短距离) (节选了教材上337面图中的16个点:即15、
16、17、18、20、21、22、23、25、26、I、K、M、 N、O、P等16个点)
d i ( 2 ) j 是 从 v i 到 v j 的 只 允 许 以 v 1 、 v 2 作 为 中 间 点 的 路 径 中 最 短 路 的 长 度 .
…
( ) D ( ) = ( d i ( ) j ) , 其 中 d i ( ) j m d i ( j 1 i ),d n i ( 1 ) { d ( j 1 ) }
d i ( ) j是 从 v i到 v j的 只 允 许 以 v 1 、 v 2 、 … v 、 作 为 中 间 点 的 路 径 中 最 短 路
的 长 度 . 即 是 从 v i到 v j中 间 可 插 入 任 何 顶 点 的 路 径 中 最 短 路 的 长 , 因 此
D ( ) 即 是 距 离 矩 阵 .
选址问题--中心问题
例 2 某 城 市 要 建 立 一 个 消 防 站 , 为 该 市 所 属 的 七 个 区 服 务 ,
如 图 所 示 . 问 应 设 在 那 个 区 , 才 能 使 它 至 最 远 区 的 路 径 最 短 .
( 1 ) 用 F l o y d 算 法 求 出 距 离 矩 阵 D = ( d i ) . j
1 4 4 4 4 4 2 3 3 3
D5 2 0 2 4, R4 2 3 4 5
3 4 2 0 6
1 3 3 4 3
9 6 4 6 0
4 3 3 3 5
d 5 9 , 故 从 v 5 到 v 1 的 1 最 短 路 为 9 .
r 5 = 4 . 由 v 4 向 v 5 追 朔 1 : r 5 3 , r 5 3 ; 4 3 由 v 4 向 v 1 追 朔 : r 4 1 1 所 以 从 v 5 到 v 1 的 最 短 路 径 为 : 5 3 4 1 .
end end
自定义floyd函数
例 1 求下图中加权图的任意两点间的距离与路径.
clear; w=[0,9,inf,3,inf;9,0,2,inf,7;inf,2, 0,2,4;3,inf,2,0,inf;inf,7,4,inf,0]; [d,r]=floyd(w)
0 7 5 3 9 7 0 2 4 6
clear; w=[0,3,inf,inf,inf,inf,inf;3,0,2,inf,inf,4,inf;inf,2,0,6,2,inf,inf;inf,inf, 6,0,1,inf,inf;inf,inf,2,1,0,4,inf;inf,4,inf,inf,4,0,1.5;inf,inf,inf,inf,inf, 1.5,0]; [d,r]=floyd(w) q=[3,2,7,1,6,1,4]; for i=1:7
应 选 在 哪 个 矿 点 , 才 能 使 各 矿 点 所 产 的 矿 运 到 选 矿 厂 所 在 地 的 总 运 力
( 千 吨 公 里 ) 最 小 .
( 1 ) 求 距 离 阵 D = ( d i ) . j
( 2 ) 计 算 各 顶 点 作 为 选 矿 厂 的 总 运 力 m ( v i )
m ( v i ) q ( v j ) d ij i 1 , 2 , j 1
( 3 ) 求 v k 使 m ( v k ) m 1 i { m ( v i ) v , k 则 } i 就 是 选 n 矿 厂 应 设 之 矿 点 . 此 点 称 为 图 G 的 重 心 或 中 位 点 .
( 2)计 算 在 各 点 vi 设 立 服 务 设 施 的 最 大 服 务 距 离 S(vi) .
S(vi)m 1ja{dxij} i1,2,
( 3 ) 求 出 顶 点 v k , 使 S ( v k ) m 1 i { S ( v i )} in
则 v k 就 是 要 求 的 建 立 消 防 站 的 地 点 . 此 点 称 为 图 的 中 心 点 . clear; w=[0,3,inf,inf,inf,inf,inf;3,0,2,inf,1.8,2.5,inf;inf,2,0,6,2,inf,inf;inf,inf, 6,0,3,inf,inf;inf,1.8,2,3,0,4,inf;inf,2.5,inf,inf,4,0,1.5;inf,inf,inf,inf,inf,1 .5,0]; [d,r]=floyd(w) S=max(d’) %求矩阵各列的最大值 s=min(S)
m1=0; for j=1:7
m1=m1+q(j)*d(i,j); end m(i)=m1; end m min(m)
d = 0 3.0000 5.0000 8.0000 7.0000 7.0000 8.5000 3.0000 0 2.0000 5.0000 4.0000 4.0000 5.5000 5.0000 2.0000 0 3.0000 2.0000 6.0000 7.5000 8.0000 5.0000 3.0000 0 1.0000 5.0000 6.5000 7.0000 4.0000 2.0000 1.0000 0 4.0000 5.5000 7.0000 4.0000 6.0000 5.0000 4.0000 0 1.5000 8.5000 5.5000 7.5000 6.5000 5.5000 1.5000 0
最短路算法
任意一对顶点之间的最短路算法:Floyd算法
(一)算法的基本思想
( ) 1、求距离矩阵的方法 2、求路径矩阵的方法 3、查找最短路路径的方法
(三)算法步骤
算法的基本思想
直 接 在 图 的 带 权 邻 接 矩 阵 中 用 插 入 顶 点 的 方 法
依 次 构 造 出 个 矩 阵 D ( 1 ) 、 D ( 2 ) 、 … 、 D () , 使 最 后 得 到 的 矩 阵 D () 成 为 图 的 距 离 矩 阵 , 同 时 也 求 出 插 入 点 矩 阵 以 便 得 到 两 点 间 的 最 短 路 径 .
( 2 ) D ( 2 ) = ( d i ( 2 ) j ) , 其 中 d i ( 2 ) j m d i ( 1 ) , jd i i ( 2 1 ) d n 2 ( 1 j ) } {
算法原理—— 查找最短路路径的方法 若 rij( ) p1,则点 p1 是点 i 到点 j 的最短路的中间点.
然 后 用 同 样 的 方 法 再 分 头 查 找 . 若 :
( 1 ) 向 点 i 追 朔 得 : r i ( 1 ) p p 2 , r i ( 2 ) p p 3 , … , r i ( k ) p p k ( 2 ) 向 点 j 追 朔 得 : r p ( 1 j ) q 1 , r q ( 1 j ) q 2 , … r , q ( m j ) j
( 1 ) 赋 初 值 :
对 所 有 i , j , d ( i , j ) w ( i , j ) , r ( i , j ) j , k 1 ( 2 ) 更 新 d ( i , j ) , r ( i , j ) 对 所 有 i , j , 若 d ( i , k ) + d ( k , j ) < d ( i , j ) , 则 wk.baidu.com ( i , j ) d ( i , k ) + d ( k , j ) , r ( i , j ) k
算法原理—— 求路径矩阵的方法
在建立距离矩阵的同时可建立路径矩阵R.
R = ( r i ) , j r i j 的 含 义 是 从 v i 到 v j 的 最 短 路 要 经 过 点 号 为 r i j 的 点 .
R ( 0 ) ( r i ( 0 ) ) , r j i ( 0 ) j j
则由点i到j的最短路的路径为: i,p k, ,p 2,p 1 ,q 1 ,q 2, ,q m ,j
i
pk
p3 p2 p1
q1
q2
qm
j
算法步骤
F l o y d
D ( i , j ) : i 到 j 的 距 离 . R ( i , j ) : i 到 j 之 间 的 插 入 点 . 输 入 : 带 权 邻 接 矩 阵 w ( i , j )
( 3 ) 若 k = , 停 止 . 否 则 k k + 1 , 转 ( 2 ) .
function [d,r]=floyd(w) n=length(w); for i=1:n
for j=1:n d(i,j)=w(i,j); r(i,j)=j;
end end for k=1:n
for i=1:n for j=1:n if d(i,k)+d(k,j)<d(i,j) d(i,j)=d(i,k)+d(k,j); r(i,j)=k; end end
0 3 5 10 7 5.5 7
3 0 2 7 4 2.5 4
5
2
0
5
2
4.5
6
D 10 7 5 0 3 7 8.5
7
4
2
3
0
4
5.5
5.5 2.5 4.5 7 4 0 1.5
7
4
6
8.5 5.5 1.5
0
S(v1)=10, S(v2)=7, S(v3)=6, S(v4)=8.5, S(v5)=7, S(v6)=7, S(v7)=8.5
S(v3)=6,故应将消防站设在v3处。
选址问题--重心问题
例 3 某 矿 区 有 七 个 矿 点 , 如 图 所 示 . 已 知 各 矿 点 每 天 的 产 矿 量
q ( v j) ( 标 在 图 的 各 顶 点 上 ) . 现 要 从 这 七 个 矿 点 选 一 个 来 建 造 矿 厂 . 问
算法原理—— 求距离矩阵的方法
把 带 权 邻 接 矩 阵 W 作 为 距 离 矩 阵 的 初 值 , 即 D ( 0 ) = ( d i ( 0 ) ) j= W
( 1 ) D ( 1 ) = ( d i ( 1 ) ) j , 其 中 d i ( 1 ) jm d i ( 0 ) , j d i ( 1 0 ) i d 1 ( 0 j ) } n{
每 求 得 一 个 D ( k ) 时 , 按 下 列 方 式 产 生 相 应 的 新 的 R ( k )
r i ( k ) j r i ( k k 1 j ) 若 d i ( k 1 j ) 否 d i ( k 1 k ) d k ( k 1 ) j 则
即当vk被插入任何两点间的最短路 径时,被记录在R(k)中,依次求 R() 时求得 D(,) 可由R() 来查找任何点对 之间最短路的路径.
m =132 78 70 92 70 106 130 ans =70
实验八、最佳灾情巡视路线(节选部分)
实验内容: 求出下图中O到其它各点的最短路线(要求求
出最短路线及其最短距离) (节选了教材上337面图中的16个点:即15、
16、17、18、20、21、22、23、25、26、I、K、M、 N、O、P等16个点)
d i ( 2 ) j 是 从 v i 到 v j 的 只 允 许 以 v 1 、 v 2 作 为 中 间 点 的 路 径 中 最 短 路 的 长 度 .
…
( ) D ( ) = ( d i ( ) j ) , 其 中 d i ( ) j m d i ( j 1 i ),d n i ( 1 ) { d ( j 1 ) }
d i ( ) j是 从 v i到 v j的 只 允 许 以 v 1 、 v 2 、 … v 、 作 为 中 间 点 的 路 径 中 最 短 路
的 长 度 . 即 是 从 v i到 v j中 间 可 插 入 任 何 顶 点 的 路 径 中 最 短 路 的 长 , 因 此
D ( ) 即 是 距 离 矩 阵 .
选址问题--中心问题
例 2 某 城 市 要 建 立 一 个 消 防 站 , 为 该 市 所 属 的 七 个 区 服 务 ,
如 图 所 示 . 问 应 设 在 那 个 区 , 才 能 使 它 至 最 远 区 的 路 径 最 短 .
( 1 ) 用 F l o y d 算 法 求 出 距 离 矩 阵 D = ( d i ) . j
1 4 4 4 4 4 2 3 3 3
D5 2 0 2 4, R4 2 3 4 5
3 4 2 0 6
1 3 3 4 3
9 6 4 6 0
4 3 3 3 5
d 5 9 , 故 从 v 5 到 v 1 的 1 最 短 路 为 9 .
r 5 = 4 . 由 v 4 向 v 5 追 朔 1 : r 5 3 , r 5 3 ; 4 3 由 v 4 向 v 1 追 朔 : r 4 1 1 所 以 从 v 5 到 v 1 的 最 短 路 径 为 : 5 3 4 1 .
end end
自定义floyd函数
例 1 求下图中加权图的任意两点间的距离与路径.
clear; w=[0,9,inf,3,inf;9,0,2,inf,7;inf,2, 0,2,4;3,inf,2,0,inf;inf,7,4,inf,0]; [d,r]=floyd(w)
0 7 5 3 9 7 0 2 4 6
clear; w=[0,3,inf,inf,inf,inf,inf;3,0,2,inf,inf,4,inf;inf,2,0,6,2,inf,inf;inf,inf, 6,0,1,inf,inf;inf,inf,2,1,0,4,inf;inf,4,inf,inf,4,0,1.5;inf,inf,inf,inf,inf, 1.5,0]; [d,r]=floyd(w) q=[3,2,7,1,6,1,4]; for i=1:7
应 选 在 哪 个 矿 点 , 才 能 使 各 矿 点 所 产 的 矿 运 到 选 矿 厂 所 在 地 的 总 运 力
( 千 吨 公 里 ) 最 小 .
( 1 ) 求 距 离 阵 D = ( d i ) . j
( 2 ) 计 算 各 顶 点 作 为 选 矿 厂 的 总 运 力 m ( v i )
m ( v i ) q ( v j ) d ij i 1 , 2 , j 1
( 3 ) 求 v k 使 m ( v k ) m 1 i { m ( v i ) v , k 则 } i 就 是 选 n 矿 厂 应 设 之 矿 点 . 此 点 称 为 图 G 的 重 心 或 中 位 点 .
( 2)计 算 在 各 点 vi 设 立 服 务 设 施 的 最 大 服 务 距 离 S(vi) .
S(vi)m 1ja{dxij} i1,2,
( 3 ) 求 出 顶 点 v k , 使 S ( v k ) m 1 i { S ( v i )} in
则 v k 就 是 要 求 的 建 立 消 防 站 的 地 点 . 此 点 称 为 图 的 中 心 点 . clear; w=[0,3,inf,inf,inf,inf,inf;3,0,2,inf,1.8,2.5,inf;inf,2,0,6,2,inf,inf;inf,inf, 6,0,3,inf,inf;inf,1.8,2,3,0,4,inf;inf,2.5,inf,inf,4,0,1.5;inf,inf,inf,inf,inf,1 .5,0]; [d,r]=floyd(w) S=max(d’) %求矩阵各列的最大值 s=min(S)
m1=0; for j=1:7
m1=m1+q(j)*d(i,j); end m(i)=m1; end m min(m)
d = 0 3.0000 5.0000 8.0000 7.0000 7.0000 8.5000 3.0000 0 2.0000 5.0000 4.0000 4.0000 5.5000 5.0000 2.0000 0 3.0000 2.0000 6.0000 7.5000 8.0000 5.0000 3.0000 0 1.0000 5.0000 6.5000 7.0000 4.0000 2.0000 1.0000 0 4.0000 5.5000 7.0000 4.0000 6.0000 5.0000 4.0000 0 1.5000 8.5000 5.5000 7.5000 6.5000 5.5000 1.5000 0
最短路算法
任意一对顶点之间的最短路算法:Floyd算法
(一)算法的基本思想
( ) 1、求距离矩阵的方法 2、求路径矩阵的方法 3、查找最短路路径的方法
(三)算法步骤
算法的基本思想
直 接 在 图 的 带 权 邻 接 矩 阵 中 用 插 入 顶 点 的 方 法
依 次 构 造 出 个 矩 阵 D ( 1 ) 、 D ( 2 ) 、 … 、 D () , 使 最 后 得 到 的 矩 阵 D () 成 为 图 的 距 离 矩 阵 , 同 时 也 求 出 插 入 点 矩 阵 以 便 得 到 两 点 间 的 最 短 路 径 .