• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

matlab中最短路编程求解

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

大二的时候发在matlab中文论坛的,写过来方便看,也算记录一下了

以下为原文-----------------------------------------------------------------------------------------------

运筹学学完最短路问题心血来潮,想通过matalb编程实现一下。

算法步骤是课上学的,如下:
1.令起点标号为0,即b(s)=0,
2.找出所有已标号vi和未标号vj的弧的集合,B={(i,j)},如果这样的弧不存在或者终点vt已标号,则计算结束
3.计算集合B中弧k(i,j)=b(i)+d(i,j)的标号
4.选一个点标号,b(l)=min{k(i,j)|(i,j)属于B},在最小的k(i,j)的终点j处标号b(l),返回第二步。

例题如图:


数字代表最短路问题里的运费或者时间。
废话不多bb,纯手工代码如下hhhh:
function [R,T] = minways( )
%最短路问题
D=[inf,8,6,2,inf,inf,inf;inf,inf,inf,inf,5,inf,inf;inf,5,inf,2,inf,4,inf;
    inf,inf,3,inf,inf,2,inf;inf,inf,inf,inf,inf,inf,5;
    inf,3,inf,inf,10,inf,7;inf,inf,inf,inf,inf,inf,inf];
R=[0,inf,inf,inf,inf,inf,inf];
Total=[1,2,3,4,5,6,7];
Done=[1];
Candidate=[2,3,4,5,6,7];
R(1)=0;
while (R(7)>1000)
a=length(Done);
b=length(Candidate);
t=1;
K={};
for i=1:a
    for j=1:b
  K{t}(i,j)=R(Done(i))+D(Done(i),Candidate(j));
    end
end
if a==1
[biaohao,number]=min(K{t});
else
x0=min(K{t});
[biaohao,number]=min(x0);
end
beibiaohao=Candidate(number);
Done=[Done,beibiaohao];
Candidate(Candidate==beibiaohao)=[];
R(beibiaohao)=biaohao;
t=t+1;
end
T=R(7);
end

写出来了很开心!!!
也发现了matalb的矩阵是多么的调皮,不听爸爸的话!

希望能给对这个问题感兴趣的提供一点微小的帮助。

END------------------------------------------------------------------------------------------------------------------------------------------------------

大二的时候好幼稚哈哈哈哈哈哈


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Matlab入门----变量、数字、运算符与函数发布时间:2022-07-18
下一篇:
matlab的下载与安装基本流程发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap