请编写一个初级的可在matlab2021运行的Dijkstra算法
时间: 2024-05-03 22:16:28 浏览: 53
好的,请看下面的代码:
```matlab
function [distances, predecessors] = dijkstra(graph, startNode)
% Dijkstra算法
% 输入参数:
% graph: n x n 的邻接矩阵,表示图的结构,无向图时必须对称
% startNode: 起点
% 输出参数:
% distances: 1 x n 的向量,表示起点到各个点的最短距离
% predecessors: 1 x n 的向量,表示起点到各个点的最短路径的前驱节点
n = size(graph, 1);
distances = inf(1, n);
predecessors = zeros(1, n);
distances(startNode) = 0;
visited = false(1, n);
while ~all(visited)
[~, currentNode] = min(distances .* ~visited);
visited(currentNode) = true;
for neighbor = 1:n
if graph(currentNode, neighbor) > 0
newDistance = distances(currentNode) + graph(currentNode, neighbor);
if newDistance < distances(neighbor)
distances(neighbor) = newDistance;
predecessors(neighbor) = currentNode;
end
end
end
end
end
```
这个Dijkstra算法实现了一个单源最短路径的计算,输入就是一个邻接矩阵和起点,输出是起点到图中所有点的最短距离和路径的前驱节点。
阅读全文