Кирсанов М.Н. Графы в Maple M.: Физматлит 2007 

>    #Программа 32 c.141

Остов наименьшего веса. Алгоритм минимального соседа

>    restart:

>    with(networks):

>    with(plots):

>    new(G): n:=7:

>    new(Ost):  addvertex(seq(i,i=1..n),Ost):

>    addvertex(seq(i,i=1..n),G):

>    addedge([{3,7},{1,2},{6,1},{5,6},{3,4},{2,7},{4,7},{1,7},{4,5},{6,7}],
weights=[27,19,24,29,21,14,16,13,22,18],G):

>    draw(G);

[Maple Plot]

>    for i to n do# Матрица весов

>        for j to n do

>         if(edges({i,j},G)<>{})

>         then C[i,j]:=eweight(op(edges({i,j},G)),G);

>         else C[i,j]:=infinity; fi;

>                   od;

>     end do;

>    V:=vertices(G):

>    w:=1: W:=V minus {w}: T:={}:

>    for v to n do near[v]:=w; d[v]:=C[v,w]; od:

>    for i while i<n+1 do # Основной цикл

>       addedge(T,Ost):

>       ris[i]:=draw(Linear([4],[5,3],[7],[6,2],[1]),Ost);

>       dmin:=infinity;

>           for j to n do

>             if d[j]<dmin and member(j,W)  

>             then v:=j; dmin:=d[j];

>             end if;

>           end do;

>           T:=T union {{near[v],v}};

>           W:=W minus {v};

>           for u to n do

>             if d[u]>C[u,v] and member(u,W)  

>             then near[u]:=v; d[u]:=C[u,v];

>             end if;

>           end do;

>    end do:# Конец основного цикла

>    MinWeight=add(eweight(op(edges(T[i],G)),G),i=1..n-1);

MinWeight = 104

>    display(seq(ris[q],q=1..n),insequence=true,thickness=1,axes=none);

[Maple Plot]

>