求最短路问题的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