matlab最短路径算法代码
时间: 2023-09-03 16:10:31 浏览: 62
以下是使用Dijkstra算法求解最短路径的Matlab代码示例:
```matlab
function [dist,path] = dijkstra(graph, start)
% 参数说明:
% graph: 图的邻接矩阵
% start: 起点
% dist: 从起点到其他各点的最短距离
% path: 从起点到其他各点的最短路径
n = size(graph,1); % 图中节点的个数
visited = false(1,n); % 记录节点是否被访问过
dist = inf(1,n); % 到各个节点的距离初始值为无穷大
path = cell(1,n); % 路径
dist(start) = 0; % 起点到自己的距离为0
path{start} = num2cell(start); % 起点到自己的路径为自己
for i = 1:n-1
min_dist = inf;
for j = 1:n
if ~visited(j) && dist(j) < min_dist
min_dist = dist(j);
u = j;
end
end
visited(u) = true; % 标记节点为已访问
for v = 1:n
if ~visited(v) && graph(u,v) ~= inf && dist(u) + graph(u,v) < dist(v)
dist(v) = dist(u) + graph(u,v); % 更新距离
path{v} = [path{u}, v]; % 更新路径
end
end
end
end
```
使用示例:
```matlab
graph = [0 3 inf inf 7;
3 0 4 2 inf;
inf 4 0 5 6;
inf 2 5 0 inf;
7 inf 6 inf 0];
[start, dest] = deal(1, 5);
[dist, path] = dijkstra(graph, start);
fprintf('Shortest distance from %d to %d is %d\n', start, dest, dist(dest));
fprintf('Shortest path from %d to %d is: ', start, dest);
fprintf('%d ', path{dest});
```
输出结果:
```
Shortest distance from 1 to 5 is 7
Shortest path from 1 to 5 is: 1 2 4 5
```