用matlab求最短路径算法代码
时间: 2024-02-28 12:23:49 浏览: 146
下面是使用Matlab实现Dijkstra算法的代码:
```matlab
function [dist, path] = dijkstra(adjacency_matrix, start_node, end_node)
% adjacency_matrix: 邻接矩阵
% start_node: 起点
% end_node: 终点
n = size(adjacency_matrix, 1); % 节点数
dist = inf(1, n); % 初始化距离
dist(start_node) = 0; % 起点到自己的距离为0
path = zeros(1, n); % 初始化路径
visited = zeros(1, n); % 初始化访问标记
for i = 1:n-1
min_dist = inf; % 初始化最小距离
for j = 1:n
if ~visited(j) && dist(j) < min_dist
min_dist = dist(j);
u = j;
end
end
visited(u) = 1; % 标记节点u为已访问
for v = 1:n
if ~visited(v) && adjacency_matrix(u, v) && dist(u) + adjacency_matrix(u, v) < dist(v)
dist(v) = dist(u) + adjacency_matrix(u, v);
path(v) = u;
end
end
end
if dist(end_node) == inf
path = [];
else
path_list = [end_node];
while path_list(1) ~= start_node % 从终点向起点回溯路径
path_list = [path(path_list(1)), path_list];
end
path = path_list;
end
```
其中,邻接矩阵`adjacency_matrix`表示图的连通情况和边权重,如果两个节点之间不存在边,则该位置为0;如果存在边,则该位置为边的权重。`start_node`和`end_node`分别为起点和终点。函数返回最短距离`dist`和最短路径`path`。
使用示例:
```matlab
adjacency_matrix = [0 10 0 30 100;
10 0 50 0 0;
0 50 0 20 10;
30 0 20 0 60;
100 0 10 60 0];
[start_node, end_node] = [1, 5];
[dist, path] = dijkstra(adjacency_matrix, start_node, end_node);
fprintf('最短距离: %d\n', dist(end_node));
fprintf('最短路径: %s\n', num2str(path));
```
输出结果:
```
最短距离: 60
最短路径: 1 4 3 5
```
阅读全文