收藏 分享(赏)

Floyd算法 计算最短距离矩阵和路由矩阵 查询最短距离和路由 matlab实验报告.pdf

上传人:HR专家 文档编号:11575182 上传时间:2020-07-02 格式:PDF 页数:11 大小:476.78KB
下载 相关 举报
Floyd算法 计算最短距离矩阵和路由矩阵 查询最短距离和路由 matlab实验报告.pdf_第1页
第1页 / 共11页
Floyd算法 计算最短距离矩阵和路由矩阵 查询最短距离和路由 matlab实验报告.pdf_第2页
第2页 / 共11页
Floyd算法 计算最短距离矩阵和路由矩阵 查询最短距离和路由 matlab实验报告.pdf_第3页
第3页 / 共11页
Floyd算法 计算最短距离矩阵和路由矩阵 查询最短距离和路由 matlab实验报告.pdf_第4页
第4页 / 共11页
Floyd算法 计算最短距离矩阵和路由矩阵 查询最短距离和路由 matlab实验报告.pdf_第5页
第5页 / 共11页
点击查看更多>>
资源描述

1、实 验 四 : Floyd 算 法 一 、 实 验 目 的 利 用 MATLAB 实 现 Floyd 算 法 , 可 对 输 入 的 邻 接 距 离 矩 阵 计 算 图 中 任 意 两 点 间 的 最 短 距 离 矩 阵 和 路 由 矩 阵 , 且 能 查 询 任 意 两 点 间 的 最 短 距 离 和 路 由 。 二 、 实 验 原 理 Floyd 算 法 适 用 于 求 解 网 络 中 的 任 意 两 点 间 的 最 短 路 径 : 通 过 图 的 权 值 矩 阵 求 出 任 意 两 点 间 的 最 短 距 离 矩 阵 和 路 由 矩 阵 。 优 点 是 容 易 理 解 , 可 以 算 出

2、 任 意 两 个 节 点 之 间 最 短 距 离 的 算 法 , 且 程 序 容 易 实 现 , 缺 点 是 复 杂 度 达 到 , 不 适 合 计 算 大 量 数 据 。 Floyd 算 法 可 描 述 如 下 : 给 定 图 G 及 其 边 (i , j )的 权 wi, j (1 in ,1 jn) F0 : 初 始 化 距 离 矩 阵 W(0 )和 路 由 矩 阵 R(0 )。 其 中 : F1 : 已 求 得 W(k-1 )和 R(k-1 ), 依 据 下 面 的 迭 代 求 W(k)和 R(k) F2 : 若 kn, 重 复 F1 ; 若 kn, 终 止 。 三 、 实 验 内 容

3、 1 、 用 MATLAB 仿 真 工 具 实 现 Floyd 算 法 : 给 定 图 G 及 其 边 (i , j )的 权 wi , j (1 in ,1 jn) , 求 出 其 各 个 端 点 之 间 的 最 小 距 离 以 及 路 由 。 ( 1 ) 尽 可 能 用 M 函 数 分 别 实 现 算 法 的 关 键 部 分 , 用 M 脚 本 来 进 行 算 法 结 果 验 证 ; ( 2 ) 分 别 用 以 下 两 个 初 始 距 离 矩 阵 表 示 的 图 进 行 算 法 验 证 : 分 别 求 出 W(7 )和 R(7 )。2 、 根 据 最 短 路 由 矩 阵 查 询 任 意 两

4、 点 间 的 最 短 距 离 和 路 由 ( 1 ) 最 短 距 离 可 以 从 最 短 距 离 矩 阵 的 (i,j)中 直 接 得 出 ;( 2 ) 相 应 的 路 由 则 可 以 通 过 在 路 由 矩 阵 中 查 找 得 出 。 由 于 该 程 序 中 使 用 的 是 前 向 矩 阵 , 因 此 在 查 找 的 过 程 中 , 路 由 矩 阵 中 r(i,j)对 应 的 值 为 Vi到 Vj 路 由 上 的 下 一 个 端 点 , 这 样 再 代 入 r(r(i,j),j), 可 得 到 下 下 个 端 点 , 由 此 不 断 循 环 下 去 , 即 可 找 到 最 终 的 路 由 。

5、( 3 ) 对 图 1 , 分 别 以 端 点 对 V4 和 V6 , V3 和 V4 为 例 , 求 其 最 短 距 离 和 路 由 ; 对 图 2 , 分 别 以 端 点 对 V1 和 V7 , V3 和 V5 , V1 和 V6 为 例 , 求 其 最短 距 离 和 路 由 。 3 、 输 入 一 邻 接 权 值 矩 阵 , 求 解 最 短 距 离 和 路 由 矩 阵 , 及 某 些 点 间 的 最短 路 径 。 四 、 采 用 的 语 言 MatLab源 代 码 : 【 func1 .m】 function w r = func1 (w)n=length(w); x = w;r = z

6、eros(n,1 );%路 由 矩 阵 的 初 始 化 for i=1 :1 :n for j=1 :1 :n if x(i,j)=inf r(i,j)=0 ; else r(i,j)=j; end, end end;%迭 代 求 出 k次 w值 for k=1 :n a=w; s = w; for i=1 :n for j=1 :n w(i,j)=min(s(i,j),s(i,k)+s(k,j); end end %根 据 k-1 次 值 和 k次 w值 求 出 k次 r值 for i=1 :n for j=1 :n if i=j r(i,j)=0 ; elseif w(i,j)a(i,j)

7、 r(i,j)=r(i,k); else r(i,j)=r(i,j); end end end end; 【 func2 .m】function P u=func2 (w,k1 ,k2 ) n = length(w);U = w; m = 1 ;while m U(i,m) + U(m,j) U(i,j) = U(i,m) + U(m,j); end end end m = m + 1 ; endu = U(k1 ,k2 ); P1 =zeros(1 ,n);k = 1 ; P1 (k) = k2 ;V = ones(1 ,n) * 1 0 0 ; kk = k2 ;while kk=k1 f

8、or i = 1 :n V(1 ,i) = U(k1 ,kk) - w(i,kk); if V(1 ,i) = U(k1 ,i) P1 (k+1 )=i; kk=i; k=k+1 ; end end endk=1 ; wrow = find(P1 =0 );for j=length(wrow):(-1 ):1 P(k) = P1 (wrow(j); k=k+1 ; endP; 【 m1 .m】 w1 =0 1 0 0 1 0 0 1 .2 9 .2 1 0 0 0 .5 ; 1 0 0 0 1 0 0 5 1 0 0 3 .1 2 ; 1 0 0 1 0 0 0 1 0 0 1 0 0 4 1

9、 .5 ; 1 .2 5 1 0 0 0 6 .7 1 0 0 1 0 0 ; 9 .2 1 0 0 1 0 0 6 .7 0 1 5 .6 1 0 0 ; 1 0 0 3 .1 4 1 0 0 1 5 .6 0 1 0 0 ; 0 .5 2 1 .5 1 0 0 1 0 0 1 0 0 0 ;w2 =0 0 .5 2 1 .5 1 0 0 1 0 0 1 0 0 ; 0 .5 0 1 0 0 1 0 0 1 .2 9 .2 1 0 0 ; 2 1 0 0 0 1 0 0 5 1 0 0 3 .1 ; 1 .5 1 0 0 1 0 0 0 1 0 0 1 0 0 4 ; 1 0 0 1 .2

10、5 1 0 0 0 6 .7 1 0 0 ; 1 0 0 9 .2 1 0 0 1 0 0 6 .7 0 1 5 .6 ; 1 0 0 1 0 0 3 .1 4 1 0 0 1 5 .6 0 ; W1 R1 = func1 (w1 )W2 R2 = func1 (w2 ) 【 m2 .m】 w=input(输 入 权 值 矩 阵 w=);k1 =input(输 入 端 点 1 :k1 =); k2 =input(输 入 端 点 2 :k2 =);w W R = func1 (w)P u=func4 (w,k1 ,k2 ); disp(k1 、 k2 间 最 短 路 : ,num2 str(P)

11、;disp(k1 、 k2 间 最 短 距 离 : ,num2 str(u); 五 、 数 据 结 构 1.主 要 函 数 最 短 距 离 、 路 由 函 数 :function w r = func1(w) n=length(w);x = w; r = zeros(n,1);%路 由 矩 阵 的 初 始 化 for i=1:1:n for j=1:1:n if x(i,j)=100 r(i,j)=0; else r(i,j)=j; end, end end;%迭 代 求 出k次w值 for k=1:n a=w; s = w; for i=1:n for j=1:n w(i,j)=min(s(

12、i,j),s(i,k)+s(k,j); end end %根 据k-1次 值 和k次w值 求 出k次r值 for i=1:n for j=1:n if i=j r(i,j)=0; elseif w(i,j)V7 V2 V6, 3和 V4之 间 最 短 距 离 是 3.2, 最 短 路 由 是 V3 V7 V1V4 通 过 上 图 可 知 , , 点 对 V1和 V7之 间 最 短 距 离 是 5.1, 最 短 路 由 是 V1 V3 V7 端 点 对 V3和 V5之 间 最 短 距 离 是 3.7, 最 短 路 由 是 V3 V1 V2 V5端 点 对 V1和 V6之 间 最 短 距 离 是 8.4, 最 短 路 由 是 V1 V2 V5 V6 七 、 遇 到 的 问 题 及 解 决 方 法 (1 ) 图 的 等 价 表 示 方 法 ;(2 ) 两 点 间 的 最 短 路 径 查 询 算 法 。 八 、 实 验 心 得 通 过 本 次 实 验 实 现 了 用 计 算 机 语 言 编 写 Floys本 掌 握 了 算 法 的 实 现 方法 , 对 MatLab编 程 语 言 更 加 熟 悉 , 培 养 了 算 法 设 计 与 优 化 能 力 。 此 次 实 验 我 受 益 匪 浅 。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 实用文档 > 工作总结

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报