prim算法matlab实现 输入3*n矩阵
时间: 2023-12-30 18:04:41 浏览: 63
以下是Prim算法的Matlab实现,输入为3*n矩阵,其中第一行为节点编号,第二行为连接的节点编号,第三行为边的权重:
```
function [mst, cost] = prim_algorithm(edges)
n = max(edges(1,:)); % 节点数
visited = zeros(1,n); % 标记节点是否被访问
mst = zeros(n-1,2); % 存储最小生成树的边
cost = 0; % 最小生成树的总权重
visited(1) = 1; % 从第一个节点开始
for i = 1:n-1 % 遍历所有节点
min_cost = Inf; % 初始化为无穷大
for j = 1:size(edges,2) % 遍历所有边
if visited(edges(1,j)) && ~visited(edges(2,j)) && edges(3,j) < min_cost
min_cost = edges(3,j); % 更新最小权重
min_edge = j; % 记录最小权重的边
end
end
mst(i,:) = edges(1:2,min_edge)'; % 将最小边加入最小生成树
cost = cost + min_cost; % 更新总权重
visited(edges(2,min_edge)) = 1; % 标记节点被访问
end
end
```
调用方式如下:
```
edges = [1 1 2 2 3; 2 3 3 4 4; 1 2 3 4 5];
[mst, cost] = prim_algorithm(edges);
disp(mst);
disp(cost);
```
其中,edges为输入的3*n矩阵,mst为输出的最小生成树的边,cost为最小生成树的总权重。
阅读全文