matlab最短路径算法代码
时间: 2023-09-16 19:15:06 浏览: 88
以下是 MATLAB 中实现最短路径算法的示例代码:
1. Dijkstra 算法:
```matlab
function [d, path] = dijkstra_algorithm(G, s)
n = size(G, 1);
d = inf(1, n);
d(s) = 0;
path = repmat({s}, 1, n);
visited = false(1, n);
prev = zeros(1, n);
for i = 1:n
[~, u] = min(d(~visited));
visited(u) = true;
for v = 1:n
if G(u, v) > 0 && ~visited(v)
if d(u) + G(u, v) < d(v)
d(v) = d(u) + G(u, v);
prev(v) = u;
path{v} = [path{u}, v];
end
end
end
end
end
```
其中,`G` 是邻接矩阵,`s` 是源节点,`d` 是从源节点到各个节点的最短路径长度,`path` 是最短路径。
2. Bellman-Ford 算法:
```matlab
function [d, path] = bellman_ford_algorithm(G, s)
n = size(G, 1);
d = inf(1, n);
d(s) = 0;
path = repmat({s}, 1, n);
for k = 1:n-1
for u = 1:n
for v = 1:n
if G(u, v) > 0 && d(u) + G(u, v) < d(v)
d(v) = d(u) + G(u, v);
path{v} = [path{u}, v];
end
end
end
end
end
```
其中,`G` 是邻接矩阵,`s` 是源节点,`d` 是从源节点到各个节点的最短路径长度,`path` 是最短路径。
需要注意的是,Bellman-Ford 算法可以处理带负权边的图,但是当存在负环时会导致算法无法结束。此时需要使用其它算法,比如 SPFA 算法。
阅读全文