dijkstra算法matlab源代码
时间: 2023-09-23 15:02:36 浏览: 97
以下是Dijkstra算法的MATLAB源代码:
```matlab
function [distances, path] = dijkstra(adj_matrix, start_node, end_node)
% Dijkstra算法实现
% adj_matrix: 邻接矩阵表示的图
% start_node: 起始节点
% end_node: 终止节点
% distances: 起始节点到各个节点的最短距离
% path: 起始节点到终止节点的路径
n = size(adj_matrix, 1); % 节点数
distances = Inf(1, n); % 初始化距离
visited = false(1, n); % 记录节点是否被访问过
previous = zeros(1, n); % 记录路径
distances(start_node) = 0; % 起始节点到自己的距离为0
for i = 1:n-1
[~, u] = min(distances(~visited)); % 未访问节点中距离最小的节点
visited(u) = true;
if any(isinf(distances))
break;
end
for v = 1:n % 更新起始节点到其他节点的距离
if adj_matrix(u, v) ~= Inf && ~visited(v)
alt = distances(u) + adj_matrix(u, v);
if alt < distances(v)
distances(v) = alt;
previous(v) = u;
end
end
end
end
path = [];
if distances(end_node) ~= Inf % 终止节点可达
current_node = end_node;
path = [current_node];
while current_node ~= start_node
current_node = previous(current_node);
path = [current_node path];
end
end
end
```
该实现中,使用邻接矩阵表示图,算法返回起始节点到各个节点的最短距离以及起始节点到终止节点的路径。
阅读全文