Программа 17 Кирсанов М.Н,
Графы в Maple
Десятичная кодировка
| > | restart:with(networks): |
| > | new(G): n:=9: V:={$1..n}: |
| > | n2:=2*n-2: # Число цифр в коде |
| > | addvertex(V,G): |
| > | addedge(Path(7,4,1,2,3,6),G): |
| > | addedge(Path(2,5,8),G): |
| > | addedge({5,9},G): |
| > | draw(Linear([1,4,7],[2,5,8],[3,6,9]),G); |
| > | v1:=3: # Корень |
| > | V0:={v1}:# Множество вершин |
| > | i:=0: # Счетчик элементов кода |
| > | S:={v1}: # Множество пройденных вершин |
| > | while i<n2 do |
Движение от корня, кодировка единицами
| > | vd1:=0: |
| > | while vd1<>1 do |
| > | v1:=min(op(neighbors(v1,G) minus S)); |
| > | vd1:=vdegree(v1,G): |
| > | i:=i+1; |
| > | KOD[i]:=1; |
| > | S:=S union {v1}; |
| > | od: |
Возвращение назад, кодировка нулями
| > | V0:={v1}: |
| > | while nops(v1)=1 do |
| > | v10:=v1: |
| > | v1:=neighbors(v1,G) minus V0; |
| > | if nops(v1)=1 and nops(v1 intersect S)<>0 then |
| > | V0:=V0 union {v1[1]}: |
| > | i:=i+1: KOD[i]:=0: |
| > | delete(edges({op(v10),op(v1)},G),G): |
| > | else v1:=v10: break; |
| > | fi; |
| > | od; |
| > | v1:=op(v1);# Начальная вершина для движения от корня |
| > | od:# Конец цикла i |
| > | Z2:=convert(KOD,list); |
Z2 := [1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0]
| > | Z10:=add(Z2[i]*2^(n2-i),i=1..n2); |
Z10 := 61858