在MATLAB里使用dijkstra算法实现最短路径的代码
时间: 2024-02-06 16:13:06 浏览: 73
matlb.rar_dijkstra_最短路径
以下是使用Dijkstra算法在MATLAB中实现最短路径的示例代码:
```matlab
function [distances, paths] = dijkstra(adj_matrix, start_node)
% 输入参数:
% adj_matrix:邻接矩阵,表示图的连接情况
% start_node:起始节点
% 输出参数:
% distances:从起始节点到各个节点的最短距离
% paths:从起始节点到各个节点的最短路径
num_nodes = size(adj_matrix, 1); % 图中节点的数量
distances = inf(1, num_nodes); % 初始时,所有节点的距离都为无穷大
distances(start_node) = 0; % 起始节点到自己的距离为0
paths = cell(1, num_nodes); % 用于存储路径
for i = 1:num_nodes
% 找到当前距离起始节点最近的节点
[min_dist, curr_node] = min(distances);
% 如果当前节点到起始节点的距离为无穷大,说明剩下的节点都不连通
if isinf(min_dist)
break;
end
% 更新与当前节点相邻的节点的距离
for j = 1:num_nodes
if adj_matrix(curr_node, j) > 0
new_dist = min_dist + adj_matrix(curr_node, j);
if new_dist < distances(j)
distances(j) = new_dist;
paths{j} = [paths{curr_node}, j]; % 更新路径
end
end
end
% 标记当前节点已经处理过
distances(curr_node) = inf;
end
```
使用该函数,可以计算出从起始节点到图中其他所有节点的最短距离和路径。例如,对于一个如下所示的图:
```
A --3-- B
| / |
4 2 1
| / |
C --5-- D
```
使用以下代码可以计算出从节点`A`出发到其他节点的最短距离和路径:
```matlab
adj_matrix = [0 3 4 0;
3 0 2 1;
4 2 0 5;
0 1 5 0];
[start_node, ~] = find(adj_matrix > 0, 1); % 选择第一个连接的节点作为起始节点
[distances, paths] = dijkstra(adj_matrix, start_node);
```
计算结果为:
```
distances = [0 3 4 4]
paths = {[1], [1 2], [1 3], [1 2 4]}
```
其中`distances`表示从起始节点到各个节点的最短距离,`paths`表示从起始节点到各个节点的最短路径。例如,从节点`A`到节点`D`的最短路径为`[1, 2, 4]`,表示经过节点`B`和`D`。
阅读全文