⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 最小生成树的kruskal算法.m

📁 MATHEMATICA 软件运用 最小生成树的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 + -