如何用matlab最小二叉樹

```matlabfunction mst = kruskal(graph % graph: 邊列表,每行包含三個(gè)元素 [起點(diǎn) 終點(diǎn) 權(quán)重] % 初始化并排序邊 ed...
```matlab
function mst = kruskal(graph)
% graph: 邊列表,每行包含三個(gè)元素 [起點(diǎn) 終點(diǎn) 權(quán)重]
% 初始化并排序邊
edges = graph;
sortrows(edges, 3);
% 初始化并構(gòu)建并查集
n = max(edges(:,1));
sets = zeros(n, 1);
for i = 1:n
sets(i) = i;
end
mst = [];
for i = 1:size(edges, 1)
u = edges(i, 1);
v = edges(i, 2);
w = edges(i, 3);
% 查找并查集的根
rootu = findroot(sets, u);
rootv = findroot(sets, v);
% 如果當(dāng)前邊不會(huì)形成環(huán),則添加到MST中
if rootu ~= rootv
mst = [mst; edges(i, :)];
sets(rootu) = rootv; % 合并集合
end
end
end
function root = findroot(sets, x)
% 查找元素x在并查集中的根
while sets(x) ~= x
x = sets(x);
end
root = x;
end
```
使用上述函數(shù)的示例:
```matlab
% 定義圖的邊列表
edges = [
1 2 4;
1 3 2;
2 3 3;
3 4 5;
4 5 3
];
% 調(diào)用kruskal函數(shù)
mst = kruskal(edges);
disp(mst);
```
注意:上述代碼假設(shè)輸入的邊列表已經(jīng)是按照權(quán)重排序的。如果邊列表未排序,你需要在調(diào)用`kruskal`函數(shù)之前對(duì)`edges`進(jìn)行排序。
本文鏈接:http://www.resource-tj.com/bian/378963.html