遍历所有点的最短路径matlab_运筹学实验8 最短路的求解
实验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 最短路的求解相关推荐
- 运筹学实验8 最短路的求解
文章目录 实验目的: 实验内容: 需要word文件请访问 http://daxs.top 站内搜索实验名称或者实验内容访问文章并且下载附件即可. 实验目的: 学会使用Matlab求解最短路. 实验内容 ...
- 运筹学实验_最短路径
运筹学实验四 实验目的: 实验要求: 报告内容: Python实现: 代码: Lingo实现: 代码: 实验目的: python实现Dijkstra算法,lingo解决最短路问题 实验要求: 报告内容 ...
- (超级详细)状态路由协议实验-OSPF(最短路径优先)实验
文章目录 一,状态路由协议实验-OSPF(最短路径优先)实验 1,要求 2,创建拓扑图和子网划分 3,配置接口和环回IP,例如R1 4,宣告OSPF,例如R1, R5环回接口不宣告 5,设置r2为DR ...
- Python算法学习[5]—图、遍历、连通、最短路径代码演练
图.遍历.连通.最短路径&代码演练 图是计算机科学中的一种数据结构,它由节点(顶点)和边组成.在实际应用中,图经常被用来表示复杂系统之间的关系,如社交网络.交通网络等.本文将介绍图的基本概念和 ...
- 运筹学实验_单纯形法
运筹学实验一 实验目的: 实验要求: 报告内容: python实现: 代码: Lingo实现: 代码: 实验目的: python实现单纯形法.lingo实现灵敏度分析.对偶变量.人工变量 实验要求: ...
- 计算机运筹学pdf,运筹学上机报告最短路问题的计算机求解.pdf
运筹学上机实验报告单 20 14 -20 15 学年第 2 学期 实验名称 最短路问题的计算机求解 日期:2015 年 5 月 26 日 班级 姓名 学号 实验 掌握最短路问题的计算机求解方法. 目的 ...
- 运筹学计算机求解运输,运筹学上机报告运输问题的计算机求解.doc
运筹学上机报告运输问题的计算机求解.doc 运筹学上机实验报告单20142015学年第2学期实验名称运输问题的计算机求解日期2015年5月19日班级姓名学号实验目的掌握运输问题的LINGO软件求解方法 ...
- 用matlab解单纯形法,实验二MATLAB编程单纯形法求解
<实验二MATLAB编程单纯形法求解>由会员分享,可在线阅读,更多相关<实验二MATLAB编程单纯形法求解(11页珍藏版)>请在人人文库网上搜索. 1.北京联合大学 实验报告 ...
- matlab求解参数线性规划问题,实验三十用MATLAB求解线性规划问题
<实验三十用MATLAB求解线性规划问题>由会员分享,可在线阅读,更多相关<实验三十用MATLAB求解线性规划问题(27页珍藏版)>请在人人文库网上搜索. 1.实验三十 用MA ...
最新文章
- 初探HTML5的本地存储
- Vim不常见但是很实用的命令技巧
- 《深入理解Java虚拟机》笔记5——类加载机制与字节码执行引擎
- php表单显示mysql数据库_php用表单形式显示数据库信息
- 【Linux】一步一步学Linux——last命令(98)
- 面向对象语言的技术特点
- Docker原理之CGroups
- 杭电多校HDU 6586 String(预处理 + 贪心)题解
- 【Tensorflow】下载预训练模型和参数小结
- VirtualBox安装教程及使用(Windows)
- 材料成型与控制专业和计算机专业,材料成型及控制工程专业
- IMU与Gyro及其它相关
- 老板杜绝员工上班不务正业
- 深信服研发、市场等大量岗位社招、校招内推
- Worldpress常规利用思路
- AI如何识别西瓜和冬瓜?
- 【BFS】lydsy3161 孤舟蓑笠翁
- 【论文阅读】智能设备中基于深度特征的语音情感识别
- 29岁,从绝望崩溃到年入50万:这个技能,决定你5年后的人生!
- 微信支付 商户号该产品权限未开通,请前往商户平台