用Matlab代码实现Prim算法
时间: 2024-04-11 22:29:05 浏览: 99
当然可以,以下是用MATLAB实现Prim算法的代码示例:
```matlab
function MST = primAlgorithm(graph)
numVertices = size(graph, 1);
% 初始化数据结构
MST = zeros(numVertices); % 最小生成树
visited = false(1, numVertices); % 记录顶点是否被访问
distance = inf(1, numVertices); % 记录顶点到最小生成树的距离
parent = zeros(1, numVertices); % 记录顶点的父节点
% 从第一个顶点开始构建最小生成树
distance(1) = 0;
for i = 1:numVertices
% 找到距离最小生成树最近的顶点
minDist = inf;
u = -1;
for j = 1:numVertices
if ~visited(j) && distance(j) < minDist
minDist = distance(j);
u = j;
end
end
visited(u) = true;
% 更新最小生成树和距离数组
for v = 1:numVertices
if graph(u, v) ~= 0 && ~visited(v) && graph(u, v) < distance(v)
parent(v) = u;
distance(v) = graph(u, v);
end
end
end
% 构建最小生成树的邻接矩阵表示
for i = 2:numVertices
MST(parent(i), i) = graph(parent(i), i);
MST(i, parent(i)) = graph(i, parent(i));
end
end
```
使用示例:
```matlab
% 创建一个邻接矩阵表示的图
graph = [0, 2, 0, 6, 0;
2, 0, 3, 8, 5;
0, 3, 0, 0, 7;
6, 8, 0, 0, 9;
0, 5, 7, 9, 0];
% 调用Prim算法函数
MST = primAlgorithm(graph);
% 输出最小生成树的邻接矩阵表示
disp(MST);
```
这个代码实现了Prim算法,用于求解给定图的最小生成树。算法首先从第一个顶点开始,逐步添加到最小生成树中,直到包含所有顶点为止。在每一步中,选择距离最小生成树最近的顶点,并将其添加到最小生成树中。然后,更新其他顶点到最小生成树的距离和父节点。最后,根据父节点数组构建最小生成树的邻接矩阵表示。
希望对你有帮助!
阅读全文