matlab 迪杰斯特拉,MATLAB的迪杰斯特拉算法求7个起始点到15个终点的最短路径!...

满意答案

dcebd7a0de6265b6ccae5ead692f1eab.png

908suncity

2013.07.29

dcebd7a0de6265b6ccae5ead692f1eab.png

采纳率:52%    等级:12

已帮助:7470人

你对图论的知识有了解吧~W是关联矩阵,s和t分别是起始点和终止节点的序号。返回的d为最短的加权路径长度,p为最优路径节点的序号向量。注意,这里W矩阵为0的点权值已经自动设为无穷大了。请参考《高等应用数学问题的 MATLAB一书》。我吧程序赋给你。

你做一个M函数用吧。

function [d,path]=dijkstra(W,s,t)

[n,m]=size(W);ix=(W==0);W(ix)=inf;

if n~=m,error('Square W required');end

visited(1:n)=0; dist(1:n)=inf;parent(1:n)=0;dist(s)=0;d=inf;

for i=1:(n-1),%求出每个节点与起始点的关系

ix=(visited==0);vec(1:n)=inf;vec(ix)=dist(ix);

[a,u]=min(vec);visited(u)=1;

for v=1:n,if (W(u,v)+dist(u)

dist(v)=dist(u)+W(u,v);parent(v)=u;

end;end;end

if parent(t)~=0,path=t;d=dist(t);%回溯最短路径

while t~=s,p=parent(t);path=[p path];t=p;end;

end;

希望对你有用

20分享举报

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值