错误使用 ~= 矩阵维度必须一致。 出错 kruskal_2 (line 17) if find(parent, start_node) ~= find(parent, end_node)
时间: 2023-12-17 18:04:17 浏览: 56
抱歉,我的代码有误,请把第17行的 `~=` 改为 `~any(find(parent, start_node) == find(parent, end_node))`,即:
```matlab
% 输入边的信息,包括边的起点、终点和权重
edges = [1 2 2; 1 3 4; 2 3 1; 2 4 3; 3 4 5];
% 对边按权重从小到大进行排序
edges = sortrows(edges, 3);
% 初始化并查集,用于维护生成树的连通性
parent = 1:4;
rank = zeros(1, 4);
% 遍历边,进行连通性判断和合并
num_edges = 0;
min_spanning_tree = [];
for i = 1:size(edges, 1)
start_node = edges(i, 1);
end_node = edges(i, 2);
if ~any(find(parent, start_node) == find(parent, end_node))
min_spanning_tree = [min_spanning_tree; edges(i, :)];
num_edges = num_edges + 1;
[parent, rank] = union(parent, rank, start_node, end_node);
if num_edges == size(parent, 2) - 1
break;
end
end
end
% 输出最小生成树
disp(min_spanning_tree);
```
这里的 `~any(find(parent, start_node) == find(parent, end_node))` 表示如果起点和终点不在同一棵生成树中,则将它们合并为一棵生成树。
阅读全文