%% **********Warshall_Floyd算法***********
% 输入:W 表示图的权值矩阵 //
% 输出:P 表示最短路 //
% u表示最短路的权和 //
%%
function [P u] = f_path(W)
n = length(W);
U = W;
m = 1;
while m <= n
for i =1:n
for j = 1:n
if U(i,j) > U(i,m) +U(m,j)
U(i,j) = U(i,m) + U(m,j);
end
end
end
m = m+1;
end
u = U(1,n);
% 输出最短路的顶点
P1 = zeros(1,n);
k = 1;
P1(k) = n;
V = ones(1,n)*inf;
kk = n;
while kk ~= 1
for i = 1:n
V(1,i) = U(1,kk) - W(i,kk);
if V(1,i) == U(1,i)
P1(k+1) = i;
kk =i;
k = k+1;
end
end
end
k = 1;
wrow = find(P1~=0);
for j = length(wrow):(-1):1
P(k) = P1(wrow(j));
k = k+1;
end
Warshall_Floyd算法
最新推荐文章于 2011-04-14 21:46:00 发布