实验8       最短路的求解

成 绩

实验类型:◆验证性实验  ◇综合性实验  ◇设计性实验

实验目的:学会使用Matlab求解最短路。

实验内容:1.Floyd算法;2.利用Matlab编程实现最短路的计算。

例:已知有6个村子,相互间道路如图所示。欲合建一所小学,已知A处有小学生50人,B处40人,C处60人,D处20人,E处70人,F处90人,问学校应建在哪个村子,使得学生上学最方便。

实验原理:

Floyd算法属于动态规划,其状态转移方程如下map[i , j] =min{map[i , k] + map[k , j] , map[i , j] };map[i , j]表示 i 到 j 的最短距离,K是穷举 i , j 的断点,map[n , n]初值应该为0。

实验步骤:

1,从任意一条单边路径开始。所有两点之间的距离是边的权,如果两点之间没有边相连,则权为无穷大。

2,对于每一对顶点 u 和 v,看看是否存在一个顶点 w 使得从 u 到 w 再到 v 比已知的路径更短。如果是更新它。

把图用邻接矩阵G表示出来,如果从Vi到Vj有路可达,则G[i][j]=d,d表示该路的长度;否则G[i][j]=无穷大。定义一个矩阵D用来记录所插入点的信息,D[i][j]表示从Vi到Vj需要经过的点,初始化D[i][j]=j。把各个顶点插入图中,比较插点后的距离与原来的距离,G[i][j] = min( G[i][j], G[i][k]+G[k][j] ),如果G[i][j]的值变小,则D[i][j]=k。在G中包含有两点之间最短道路的信息,而在D中则包含了最短通路径的信息。

程序代码:

function[dist,mypath]=myfloyd(a,sb,db)

%寻找i,j两点最短路径

% 输入:a—邻接矩阵,元素(aij)是顶点i到j之间的直达距离,可以是有向的

% sb—起点的标号;db—终点的标号

% 输出:dist—最短路的距离;% mypath—最短路的路径

n=size(a,1);path=zeros(n);

for k=1:n

for i=1:n

for j=1:n

if a(i,j)>a(i,k)+a(k,j)

a(i,j)=a(i,k)+a(k,j);

path(i,j)=k;

end

end

end

end

dist=a(sb,db);

parent=path(sb,:);%从起点sb到终点db的最短路上各顶点的前驱顶点

parent(parent==0)=sb;%path中的分量为0,表示该顶点的前驱是起点

mypath=db;t=db;

while t~=sb

p=parent(t);

mypath=[p,mypath];

t=p;

end

function[path]=myfloyd2(a)

%寻找各顶点之间的最短通路

% 输入:a—邻接矩阵,元素(aij)是顶点i到j之间的直达距离,可以是有向的

% 输出:path—各顶点之间的最短通路值

n=length(a);

a(a==0)=inf;

a([1:n+1:n^2])=0;%对角线元素替换成零,Matlab中数据是逐列存储的

path=zeros(n);

for k=1:n

for i=1:n

for j=1:n

if a(i,j)>a(i,k)+a(k,j)

a(i,j)=a(i,k)+a(k,j);

path(i,j)=k;

end

end

end

end

end

输出结果:

>> a= [0 2 7 inf inf inf

2 0 4 6 8 inf

7 4 0 1 3 inf

inf 6 1 0 1 6

inf 8 3 1 0 3

inf inf inf 6 3 0];

>>[path]=myfloyd2(a)

path =

0    0     2     3    4     5

0    0     0     3    4     5

2    0     0     0    4     5

3    3     0     0    0     5

4    4     4     0    0     0

5    5     5     5    0     0

>> a= [0 2 7 inf inf inf

2 0 4 6 8 inf

7 4 0 1 3 inf

inf 6 1 0 1 6

inf 8 3 1 0 3

inf inf inf 6 3 0];

>> sb= 1;

>> db= 6;

>>[dist,mypath]=myfloyd(a,sb,db)

dist =

11

mypath

1    2     3     4    5     6

实验总结:通过本次实验我学习了Floyd算法,用Floyd算法来求解最短路问题;通过本次实验我掌握了Floyd算法的基本原理;训了了我编写程序的能力,以及把数学方法转化为算法的能力;本次实验中我发现了自身在编写程序方面的一些不足;在今后的学习中编写代码的能力有待提高。

遍历所有点的最短路径matlab_运筹学实验8 最短路的求解相关推荐

  1. 运筹学实验8 最短路的求解

    文章目录 实验目的: 实验内容: 需要word文件请访问 http://daxs.top 站内搜索实验名称或者实验内容访问文章并且下载附件即可. 实验目的: 学会使用Matlab求解最短路. 实验内容 ...

  2. 运筹学实验_最短路径

    运筹学实验四 实验目的: 实验要求: 报告内容: Python实现: 代码: Lingo实现: 代码: 实验目的: python实现Dijkstra算法,lingo解决最短路问题 实验要求: 报告内容 ...

  3. (超级详细)状态路由协议实验-OSPF(最短路径优先)实验

    文章目录 一,状态路由协议实验-OSPF(最短路径优先)实验 1,要求 2,创建拓扑图和子网划分 3,配置接口和环回IP,例如R1 4,宣告OSPF,例如R1, R5环回接口不宣告 5,设置r2为DR ...

  4. Python算法学习[5]—图、遍历、连通、最短路径代码演练

    图.遍历.连通.最短路径&代码演练 图是计算机科学中的一种数据结构,它由节点(顶点)和边组成.在实际应用中,图经常被用来表示复杂系统之间的关系,如社交网络.交通网络等.本文将介绍图的基本概念和 ...

  5. 运筹学实验_单纯形法

    运筹学实验一 实验目的: 实验要求: 报告内容: python实现: 代码: Lingo实现: 代码: 实验目的: python实现单纯形法.lingo实现灵敏度分析.对偶变量.人工变量 实验要求: ...

  6. 计算机运筹学pdf,运筹学上机报告最短路问题的计算机求解.pdf

    运筹学上机实验报告单 20 14 -20 15 学年第 2 学期 实验名称 最短路问题的计算机求解 日期:2015 年 5 月 26 日 班级 姓名 学号 实验 掌握最短路问题的计算机求解方法. 目的 ...

  7. 运筹学计算机求解运输,运筹学上机报告运输问题的计算机求解.doc

    运筹学上机报告运输问题的计算机求解.doc 运筹学上机实验报告单20142015学年第2学期实验名称运输问题的计算机求解日期2015年5月19日班级姓名学号实验目的掌握运输问题的LINGO软件求解方法 ...

  8. 用matlab解单纯形法,实验二MATLAB编程单纯形法求解

    <实验二MATLAB编程单纯形法求解>由会员分享,可在线阅读,更多相关<实验二MATLAB编程单纯形法求解(11页珍藏版)>请在人人文库网上搜索. 1.北京联合大学 实验报告 ...

  9. matlab求解参数线性规划问题,实验三十用MATLAB求解线性规划问题

    <实验三十用MATLAB求解线性规划问题>由会员分享,可在线阅读,更多相关<实验三十用MATLAB求解线性规划问题(27页珍藏版)>请在人人文库网上搜索. 1.实验三十 用MA ...

最新文章

  1. 初探HTML5的本地存储
  2. Vim不常见但是很实用的命令技巧
  3. 《深入理解Java虚拟机》笔记5——类加载机制与字节码执行引擎
  4. php表单显示mysql数据库_php用表单形式显示数据库信息
  5. 【Linux】一步一步学Linux——last命令(98)
  6. 面向对象语言的技术特点
  7. Docker原理之CGroups
  8. 杭电多校HDU 6586 String(预处理 + 贪心)题解
  9. 【Tensorflow】下载预训练模型和参数小结
  10. VirtualBox安装教程及使用(Windows)
  11. 材料成型与控制专业和计算机专业,材料成型及控制工程专业
  12. IMU与Gyro及其它相关
  13. 老板杜绝员工上班不务正业
  14. 深信服研发、市场等大量岗位社招、校招内推
  15. Worldpress常规利用思路
  16. AI如何识别西瓜和冬瓜?
  17. 【BFS】lydsy3161 孤舟蓑笠翁
  18. 【论文阅读】智能设备中基于深度特征的语音情感识别
  19. 29岁,从绝望崩溃到年入50万:这个技能,决定你5年后的人生!
  20. 微信支付 商户号该产品权限未开通,请前往商户平台

热门文章

  1. sqlServer 获取最新的一条数据
  2. 自学Java第一周的总结
  3. Linux下单独编译安装PHP扩展包
  4. 移动web开发-------meta
  5. Web.Config中的compilation debug=true/
  6. zabbix的邮件报警
  7. C#程序通过模板自动创建Word文档.doc
  8. 探索ring0之内核概述
  9. 干货:基于 Git Flow 的 Git 最佳实践(附加解决大家经常碰到的问题)
  10. 有道精品课数据中台建设实践