dijkstra 算法matlab代码
时间: 2023-09-03 09:09:24 浏览: 86
以下是Dijkstra算法的Matlab代码实现:
```matlab
function [, path] = dijkstra(adj_matrix, start, end_node)
% Dijkstra算法
% 输入参数:
% adj_matrix: 邻接矩阵,表示图的连接关系
% start_node: 起点
% end_node: 终点
% 输出参数:
% dist: 起点到各个节点的最短距离
% path: 起点到终点的最短路径
n = size(adj_matrix, 1); % 节点数
dist = inf(1, n); % 起点到各个节点的最短距离
path = zeros(1, n); % 起点到终点的最短路径
visited = false(1, n); % 记录节点是否已被访问
dist(start_node) = 0; % 起点到自身的距离为0
for i = 1:n
% 找到未访问节点中距离起点最近的节点
[~, u] = min(dist .* ~visited);
if isinf(dist(u))
break;
end
visited(u) = true;
% 更新与u相邻的节点的距离
for v = 1:n
if adj_matrix(u, v) ~= 0 && ~visited(v)
alt = dist(u) + adj_matrix(u, v);
if alt < dist(v)
dist(v) = alt;
path(v) = u;
end
end
end
if u == end_node
break;
end
end
% 构建起点到终点的最短路径
if path(end_node) ~= 0
p = end_node;
while p ~= start_node
p = path(p);
path = [p, path];
end
end
```
其中,`adj_matrix`为邻接矩阵,表示图的连接关系;`start_node`为起点,`end_node`为终点。输出参数`dist`为起点到各个节点的最短距离,`path`为起点到终点的最短路径。
阅读全文