📄 最小生成树的kruskal算法.m
字号:
Clear[data, first, end, sdata, zuizong, shuju];(*Flroid*)
data = Flatten[Import["e:\\1.xls"],
1];(*data's sign is {piont one,point two,length of them }*)
end = {};
sdata = SortBy[data, Last];
data = sdata;
end1 = Drop[data, -1];
zai[biao_List, shu_] :=
Module[{d = biao, y, i, t, q}, y = Length[d] + 1;
For[i = 1, i <= Length[d], i++,
t = MemberQ[d[[i]], shu] ;
If[t == True, y = i; Break[], Continue[] ] ; ];
If[y == Length[d] + 1, 0, y]]
(*the number "shu" is or not in the list "biao"*)
first = {}; zuizong = {};
search[x_List] := Module[{end = x, n1, n2, p1, first1},
While[end != {},
n1 = end[[1, 1]]; n2 = end[[1, 2]];
Which[
zai[first, n1] == 0 && zai[first, n2] != 0,
zuizong = Append[zuizong, end[[1]]];
p1 = Position[first, n2]; zain = p1[[1, 1]];
first1 = Union[Flatten[Append[first[[zain]], {n1, n2}]]];
first = ReplacePart[first, zain -> first1]; end = Delete[end, 1],
zai[first, n1] != 0 && zai[first, n2] == 0,
zuizong = Append[zuizong, end[[1]]];
p1 = Position[first, n1]; zain = p1[[1, 1]];
first1 = Union[Flatten[Append[first[[zain]], {n1, n2}]]];
first = ReplacePart[first, zain -> first1]; end = Delete[end, 1],
zai[first, n1] == 0 && zai[first, n2] == 0,
zuizong = Append[zuizong, end[[1]]];
first = Append[first, {n1, n2}]; end = Delete[end, 1],
zai[first, n1] != 0 && zai[first, n2] != 0 &&
zai[first, n1] != zai[first, n2],
zuizong = Append[zuizong, end[[1]]];
h = Union[first[[zai[first, n1]]],
first[[zai[first, n2]]], {n1, n2}];
first = Union[
ReplacePart[first, {zai[first, n1] -> h, zai[first, n2] -> h}]];
end = Delete[end, 1],
zai[first, n1] == zai[first, n2], end = Delete[end, 1]]
]; zuizong ]
search[end1];
b1 = {"企业1", "企业2", "企业3"};
For[k = 1, k <= Length[zuizong], k++,
If[zuizong[[k, 1]] == 24.`, zuizong[[k, 1]] = b1[[1]]];
If[zuizong[[k, 2]] == 24.`, zuizong[[k, 2]] = b1[[1]]];
If[zuizong[[k, 1]] == 41.`, zuizong[[k, 1]] = b1[[2]]];
If[zuizong[[k, 2]] == 41.`, zuizong[[k, 2]] = b1[[2]]];
If[zuizong[[k, 1]] == 34.`, zuizong[[k, 1]] = b1[[3]]];
If[zuizong[[k, 2]] == 34.`, zuizong[[k, 2]] = b1[[3]]];]
shuju = Table[{zuizong[[i, 1]] -> zuizong[[i, 2]],
zuizong[[i, 3]]}, {i, 1, Length[zuizong]}];
TreePlot[shuju, VertexLabeling -> True]
1.xls:mingze928@163.com
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -