Warshall_Floyd算法

%% **********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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值