MATALB 复杂网络最短路径及最短距离Dijkstra算法源码

这是一个MATLAB编写的Dijkstra算法源码,用于计算复杂网络中的最短路径和最短距离。作者Asterghost在2019年1月17日于北京编写。算法首先初始化权重矩阵,然后通过循环找到并更新最短路径,最终得出从源节点到目标节点的路径及其总距离。
摘要由CSDN通过智能技术生成
  1. function [distance,path]=Dijkstra(W,s,d)
  2. %20190117 by Asterghost,in Beijing
  3. N=length(W);
  4. for i=1:N
  5.     W(i,find(W(i,:)==0))=inf;
  6.     W(i,i)=0;
  7. end
  8. short_path_val=1./zeros(1,N);
  9. pre_dot=zeros(1,N);
  10. neighbor=W(s,:);
  11. neighbor(s)=inf; 
  12. short_path_val(s)=0; 
  13. dot=zeros(1,N);
  14. dot(:,:)=s;  
  15. while sum(neighbor(:,:)~=inf)
  16.     
  17.     [xx,x]=min(neighbor);  
  18.     x=x(1);
  19.     neighbor(x)=inf;  
  20.     
  21.     short_path_val(x)=xx;
  22.     pre_dot(x)=dot(x); 
  23.     
  24.     val_copy=xx+W(x,:); 
  25.     yy=find(short_path_val==inf);
  26.     y=find(val_copy<neighbor); 
  27.     y1=intersect(y,yy); 
  28.     neighbor(y1)=val_copy(y1);
  29.     dot(y1)=x;
  30.     
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值