var edges := { [{"A","B"}, 3], [{"B","C"},7],
[{"C","D"},2],
[{"A","C"}, 6], [{"D","E"}, 1], [{"C","E"}, 4] };
print(MinSpanTree(nodes,edges));
procedure MinSpanTree(nodes,edges);
var tree := {};
var newnodes := { arb nodes
};
nodes := nodes - newnodes;
while nodes /= {} loop
eligible_edges := pickedges(newnodes,nodes,edges);
[endpoints,cost] :=
arb {
[endpoints,cost] in eligible_edges |
cost = min / { c : [-,c] in eligible_edges }};
newnode := arb { n in
endpoints | n in nodes };
nodes less:= newnode;
newnodes with:= newnode;
tree with:= [endpoints,cost];
end loop;
return tree;
end MinSpanTree;
procedure pickedges(newnodes,oldnodes,edges);
return { [endpoints,cost] in
edges |
(exists x in endpoints | x in oldnodes) and
(exists y in endpoints | y in newnodes) };
end pickedges;
end graph;