dijkstra的matlab程序,最短路径算法dijkstra的matlab程序,让大家来找茬,交流

%初始化

MAXNUM=5;

MAXINT=32767;

dij=MAXINT*ones(MAXNUM,MAXNUM);

dij(1,2)=10;

dij(1,4)=30;

dij(1,5)=100;

dij(2,3)=50;

dij(3,5)=10;

dij(4,3)=20;

dij(4,5)=60;

dij(1,1)=0;

dij(2,2)=0;

dij(3,3)=0;

dij(4,4)=0;

dij(5,5)=0;

V=1:MAXNUM;%全部节点

S=[1];%已分配节点

m=1;%过渡节点

ite=2;

U=2:MAXNUM;%未分配的节点

%重复,直到U为空

%将U中的节点不断添加到S中,同时记录过渡节点和最短路径

dist=dij(1,:);%节点1到其它节点的初始距离值,每次迭代更新一次

dist1=dist;

while(length(U)>0)

dist1(dist1==min(dist1))=[]; %已分配的节点对应的距离从dist1中删除

m=find(dist==min(dist1));%记录dist1当前的最小值在dist中的下标

S(ite)=m;%将过渡节点加入S

U(find(U==m))=[];%将过渡节点从U中删除

%比较1经过m与不经过m到未分配节点的距离,dist中的距离更新为较小者

for u=1:length(U)

if(dist(m)+dij(m,U(u))

dist1(find(dist1==dist(U(u))))=dist(m)+dij(m,U(u));%dist1中的值同步更新

dist(U(u))=dist(m)+dij(m,U(u));

end

end

ite=ite+1;

end

%保存到每个节点的最短路径,每行对应每个节点的路径和最短距离,其实就是将S逆序输出

path(1,1)=1;

for node=2:MAXNUM

location=find(S==node);

path(node,1)=node;

i=2;

for s=location:-1:2

if(dij(S(s-1),S(s))~=MAXINT)

path(node,i)=S(s-1);

i=i+1;

end

end

path(node,i)=dist(node);

end

%TODO:程序中用到了find()方法,这是一个bug,find可能会返回不止一个值,取其中任意一个就行。

webwxgetmsgimg.jpg

(46.31 KB, 下载次数: 2)

2016-8-8 19:09 上传

442a53943febe9465fc072b4fbe10813.gif

b2a5a3e0dcc7d508e00275fe42fce1b5.gif

程序对应的有向图

4eb4b841a47e2f59eb04161142e5aa72.png

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值