迪杰斯特拉算法matlab
时间: 2023-10-16 14:26:12 浏览: 90
迪杰斯特拉算法 matlab
以下是迪杰斯特拉算法的 Matlab 代码示例:
```matlab
function [dist, path] = dijkstra_algorithm(graph, start_node, end_node)
% graph: 有向图的邻接矩阵
% start_node: 起始节点
% end_node: 终止节点
% dist: 起始节点到每个节点的最短距离
% path: 起始节点到终止节点的最短路径
n = length(graph); % 节点数
visited = false(1,n); % 标记数组
dist = inf(1,n); % 起始节点到每个节点的最短距离
path = zeros(1,n); % 起始节点到每个节点的路径
% 初始化
dist(start_node) = 0;
path(start_node) = start_node;
% 迭代
for i = 1:n
% 找到当前未访问节点中距离最小的节点
[~, u] = min(dist(~visited));
u = find(~visited, 1, 'first');
for j = 1:n
if graph(u,j) ~= 0 && ~visited(j)
alt = dist(u) + graph(u,j);
if alt < dist(j)
dist(j) = alt;
path(j) = u;
end
end
end
visited(u) = true;
if u == end_node
break;
end
end
% 路径
p = end_node;
while p ~= start_node
path(p) = path(path(p));
p = path(p);
end
path = fliplr(path(path ~= 0));
```
其中,graph 是有向图的邻接矩阵,start_node 是起始节点,end_node 是终止节点。dist 是起始节点到每个节点的最短距离,path 是起始节点到终止节点的最短路径。
阅读全文