请给出迪杰斯特拉算法求指定起终点的matlab完整代码
时间: 2023-10-28 17:04:31 浏览: 75
迪杰斯特拉算法matlab源码
好的,以下是用Matlab实现迪杰斯特拉算法求指定起终点的完整代码:
```matlab
function [dist,path] = dijkstra(G,s,t)
% G:邻接矩阵,s:起点,t:终点
% dist:s到所有点的最短距离,path:s到t的最短路径
n = size(G, 1);
dist = inf(1,n); % 到各点的距离
path = zeros(1,n); % 到各点的路径
S = false(1,n); % 是否已经找到最短路径
dist(s) = 0;
for i = 1 : n-1
minDist = inf;
u = -1;
% 找到当前未找到最短路径的点中距离最近的点
for j = 1 : n
if ~S(j) && dist(j) < minDist
minDist = dist(j);
u = j;
end
end
if u == -1 || u == t
break;
end
% 标记已经找到最短路径
S(u) = true;
% 更新其它点到起点的距离
for j = 1 : n
if ~S(j) && G(u,j)~=inf && dist(j) > dist(u) + G(u,j)
dist(j) = dist(u) + G(u,j);
path(j) = u;
end
end
end
% 构建路径
if path(t) == 0
path = [];
else
pathNodes = t;
while path(pathNodes) ~= s
pathNodes = [path(pathNodes), path(pathNodes)];
end
path = [s, pathNodes, t];
end
end
```
其中,邻接矩阵G的每个元素表示两个节点间的距离,如果两个节点之间没有直接连接,则距离为inf。s和t分别表示起点和终点,函数返回值为最短距离dist和最短路径path。
阅读全文