求最短路的Dijkstra算法matlab源代码

求最短路问题的Dijkstra算法

function [cost,path]=Dijkstra(graph,sou,des)
% 无向图的最短路径算法
%获得城市的个数
[~,num_city]=size(graph);
%路径向量用于存放最优路径
path_g=zeros(1,num_city);
path_g(1,:)=graph(sou,:);
min_index=sou;
min_value=0;
path(1,1)=min_index;
count=2;

all_min_index(1,1)=min_index;
ami_count=2;
graph(1,1)=inf;

while min_index~=des
    [min_value,min_index]=min(path_g);
    [~,p_w]=size(all_min_index);
    for i=1:p_w
       graph(min_index,all_min_index(1,i))=inf;
       graph(all_min_index(1,i),min_index)=inf;
    end
    all_min_index(1,ami_count)=min_index;
    ami_count=ami_count+1;
    
    path_g(1,min_index)=inf;
    new_path_g=graph(min_index,:)+min_value;
    
    tmp_g=sort([path_g;new_path_g]);
    if tmp_g(1,des)~=Inf
        if tmp_g(1,des)==new_path_g(1,des)
            path(1,count)=min_index;
            count=count+1;
        end
    end
    path_g=tmp_g(1,:);
end   

cost=min_value;   %最小的路径值
path(1,count)=des;%终点
end
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值