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

Распаковка кода Гапта

>    restart;with(LinearAlgebra):with(networks):

>    with(plottools):

>    kod:=<3,1,1,1,1,4,2,1,2,3,3,3>:  # Код Гапта    

>    n1:=nops(kod);

n1 := 3

>    n1:=Dimension(kod);

n1 := 12

>                                 # Длина вектора кода

>    n:=add(kod[i],i=1..n1)+1:    # Число вершин дерева

>    new(G):                      # Создание нового графа

>    addvertex(seq(i,i=1..n),G):  # Добавление  n вершин

>    rb:=seq([1,1+i],i=1..kod[n1]):  # Список ребер

>    vr:=[1],[seq(i+1,i=1..kod[n1])]:# Список вершин

>    j:=1: t:=1: s:=1:

>    for m from 0 while n1-s-j+1>0 do

>    j:=s+j-1:

>    for s to kod[n1-m] do

>    t1:=seq(kod[n1]+i+t,i=1..kod[n1-s-j+1]);

>    rb:=rb,seq([j+s,kod[n1]+i+t],i=1..kod[n1-s-j+1]);# Увеличение списка ребер

>    t:=t+kod[n1-s-j+1];

>    od:

>    end do:

>    rb;# Ответ. Список ребер

[1, 2], [1, 3], [1, 4], [2, 5], [2, 6], [2, 7], [3, 8], [3, 9], [3, 10], [4, 11], [4, 12], [5, 13], [6, 14], [6, 15], [7, 16], [7, 17], [7, 18], [7, 19], [8, 20], [9, 21], [10, 22], [11, 23], [12, 24],...
[1, 2], [1, 3], [1, 4], [2, 5], [2, 6], [2, 7], [3, 8], [3, 9], [3, 10], [4, 11], [4, 12], [5, 13], [6, 14], [6, 15], [7, 16], [7, 17], [7, 18], [7, 19], [8, 20], [9, 21], [10, 22], [11, 23], [12, 24],...

Список вершин для рисунка

>    vr:=[1]:

>    c[1]:=1:# Одна вершина в ярусе 1

>    t:=0: h:=1:

>    for z while n1-t>0 do

>    t:=t+c[z]:

>    c[z+1]:=add(kod[n1-t+i],i=1..c[z]);# Число вершин яруса

>    h:=h+c[z+1];
vr:=vr,[seq(j,j=h+1-c[z+1]..h)];
od:

>    vr;                # Ответ. Список вершин

[1], [2, 3, 4], [5, 6, 7, 8, 9, 10, 11, 12], [13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26]

>    addedge([rb],G):   # Добавление к графу ребер

>    rotate(draw(Linear(vr),G),-Pi/2);# Рисунок графа  

[Maple Plot]