matlab实现Dijkstra算法
时间: 2023-10-16 17:13:58 浏览: 80
Dijkstra算法是一种常用的单源最短路径算法,可以用于解决无负权边的加权图的最短路径问题。下面是Matlab代码实现Dijkstra算法:
```matlab
function [dist, path] = dijkstra_algorithm(graph, start_node)
% Dijkstra算法
% 输入:图graph,起始节点start_node
% 输出:节点到start_node的最短路径dist,节点到start_node的路径path
% 获取图的大小
[n, ~] = size(graph);
% 初始化
dist = inf(1, n); % 到起点的距离
path = cell(1, n); % 到起点的路径
visited = false(1, n); % 是否已经访问
% 起始节点初始化
dist(start_node) = 0;
path{start_node} = num2cell(start_node);
% 遍历其他节点
for i = 1:n-1
% 找到未访问节点中距离最小的节点
[~, u] = min(dist .* ~visited);
% 标记为已访问
visited(u) = true;
% 更新与u相邻节点的距离
for v = 1:n
if ~visited(v) && graph(u,v) ~= inf
if dist(u) + graph(u,v) < dist(v)
dist(v) = dist(u) + graph(u,v);
path{v} = [path{u}, v];
end
end
end
end
end
```
其中,输入的graph是一个$n \times n$的矩阵,表示图的邻接矩阵;start_node表示起始节点。输出的dist是一个1维向量,表示每个节点到start_node的最短距离;path是一个cell数组,表示每个节点到start_node的最短路径。
阅读全文