prim算法matlab实现 输入n*3矩阵
时间: 2023-12-30 14:04:41 浏览: 73
以下是Prim算法的Matlab实现,输入为n*3矩阵,其中第一列为节点编号,第二列为连接的节点编号,第三列为边的权重:
```
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,1) % 遍历所有边
if visited(edges(j,1)) && ~visited(edges(j,2)) && edges(j,3) < min_cost
min_cost = edges(j,3); % 更新最小权重
min_edge = j; % 记录最小权重的边
end
end
mst(i,:) = edges(min_edge,1:2); % 将最小边加入最小生成树
cost = cost + min_cost; % 更新总权重
visited(edges(min_edge,2)) = 1; % 标记节点被访问
end
end
```
调用方式如下:
```
edges = [1 2 1; 1 3 2; 2 3 3; 2 4 4; 3 4 5];
[mst, cost] = prim_algorithm(edges);
disp(mst);
disp(cost);
```
其中,edges为输入的n*3矩阵,mst为输出的最小生成树的边,cost为最小生成树的总权重。
阅读全文