Программа 16 Кирсанов М.Н,
Графы в Maple
Центроид дерева
> | restart; with(networks): |
> | n:=16: G:=void(n):# Пустой граф |
> | addedges({{13,14},{11,12},{15,16},{6,7},{7,8},{8,4}},G): |
> | addedges(Path(1,5,9,10,14,15,11,7,3,2),G): |
> | nops(edges(G)):# Число ребер |
> | r:=seq([seq(1+j+4*i,i=0..3)],j=0..3): |
> | draw(Linear(r),G):# Рисунок |
> | DL:=maxdegree(G): # Максимальная степень вершин |
> | V:=Vector(DL): |
> | for i to n do # Цикл для расчёта весов вершин |
> | H:=duplicate(G):# Последовательное удаление вершин из копии G |
> | H:=delete(i,H): |
> | Di:=vdegree(i,G); |
> | K:=components(H):# Список вершин каждой ветви: |
> | for j to nops(K) do |
> | V[j]:=nops(edges(induce(K[j],G)))+1; # Вес ветви |
> | od: |
> | W[i]:=max(seq(V[k],k=1..Di));# Вес вершины |
> | od: |
> | W:=convert(W,array);# Массив весов |
W := vector([15, 15, 14, 15, 14, 15, 10, 14, 13, 12, 8, 15, 15, 10, 8, 15])
> | # Построим центроид: |
> | minW:=min(seq(W[i],i=1..n));# Наименьший вес вершины |
minW := 8
> | print("Центроид состоит из следующих вершин:"): |
> | C:={}: |
> | for i to n do |
> | if W[i]=minW then |
> | C:=C union {i}; |
> | fi; |
> | od: |
> | print(C); |
"Центроид состоит из следующих вершин:"
{11, 15}