floyd算法matlab
时间: 2023-06-20 19:08:47 浏览: 74
matlab实现的floyd算法
4星 · 用户满意度95%
下面是Floyd算法在MATLAB中的实现:
```matlab
function [D, P] = Floyd(W)
% FLOYD - Floyd算法
% 输入参数:
% W - n x n 的邻接矩阵
% 输出参数:
% D - n x n 的矩阵,D(i,j)表示从i到j的最短路径长度
% P - n x n 的矩阵,P(i,j)记录i到j的最短路径中,j的前一个节点
n = size(W, 1);
D = W;
P = zeros(n, n);
for k = 1:n
for i = 1:n
for j = 1:n
if D(i, k) + D(k, j) < D(i, j)
D(i, j) = D(i, k) + D(k, j);
P(i, j) = k;
end
end
end
end
end
```
其中,输入参数 $W$ 为邻接矩阵,$D$ 为最短路径长度矩阵,$P$ 为前驱节点矩阵。在算法的第一步中,我们初始化 $D$ 为 $W$,$P$ 则全部初始化为 $0$。在三重循环中,我们枚举 $k,i,j$,若从 $i$ 经过 $k$ 到 $j$ 的路径比原来的路径更短,则更新 $D$ 和 $P$。
需要注意的是,若输入的邻接矩阵中不存在一条从 $i$ 到 $j$ 的路径,则 $D(i,j)$ 应该设为一个非常大的数,例如 $inf$,以便在更新 $D$ 时使其不被考虑。
阅读全文