写一段最优路径的MATLAB代码
时间: 2023-05-30 14:05:08 浏览: 115
以下是一个简单的最优路径的MATLAB代码,使用了Dijkstra算法:
```matlab
function [dist, path] = dijkstra(graph, start, dest)
% graph: 邻接矩阵表示的图,其中graph(i,j)表示从i到j的距离
% start: 起点
% dest: 终点
% dist: 数组,存放从起点到各点的最短距离
% path: 数组,存放最优路径
n = size(graph, 1);
dist = inf(1, n);
dist(start) = 0;
path = zeros(1, n);
visited = false(1, n);
for i = 1:n
% 选择未访问过的最短距离的点
[~, u] = min(dist .* ~visited);
visited(u) = true;
% 更新当前点的邻居的距离
for v = 1:n
if graph(u, v) > 0 && ~visited(v)
alt = dist(u) + graph(u, v);
if alt < dist(v)
dist(v) = alt;
path(v) = u;
end
end
end
end
% 生成最优路径
p = dest;
while p ~= start
path(p) = path(path(p));
p = path(p);
end
path = fliplr(path);
end
```
使用方法:
```matlab
% 创建一个带权图,其中1表示两个节点之间有边,0表示没有边
graph = [0 1 0 1 0;
1 0 1 0 1;
0 1 0 1 0;
1 0 1 0 1;
0 1 0 1 0];
% 设置起点和终点
start = 1;
dest = 5;
% 计算最优路径和距离
[dist, path] = dijkstra(graph, start, dest);
% 输出结果
fprintf('最短距离: %d\n', dist(dest));
fprintf('最优路径: ');
fprintf('%d ', path);
fprintf('%d\n', dest);
```
输出结果:
```
最短距离: 2
最优路径: 1 4 5
```
阅读全文