最近两天做了一个图论的题目,其中有一个求最短路的,我用的是floyd算法,现贴出来,供大家参考。
-------------------------------------------------------------------
function [LeR,r]=floyd(w)
%[LeR,r]=floyd(w)
%w;邻接矩阵
%LeR:为所得的最短路矩阵
%参考文献:谢政,李建平:网络算法与复杂性理论.国防科技出版社.1995,第一版。
n=size(w,1);
u.m_1=w;
r.m_1=ones(n,1)*[1:n];
m=1;
while m~=n+1
for i=1:n
for j=1:n
if u.m_1(i,j)<=u.m_1(i,m)+u.m_1(m,j)
r.m(i,j)=r.m_1(i,j);
else
r.m(i,j)=r.m_1(i,m);
end
u.m(i,j)=min(u.m_1(i,j),u.m_1(i,m)+u.m_1(m,j));
end
end
u.m_1=u.m;
r.m_1=r.m;
m=m+1;
end
LeR=u.m;
--------------------------------------------------------------------------
最短轨:
function [Road]=FindRoad(var1,var2,r)
%Road=cell(size(r.m));
Rola=0;
Road=var1;
while Rola~=var2
Rola=r.m(var1,var2);
Road=[Road Rola];
var1=Rola;
end[em05][em05][em05][em05][em05][em05] |