Программа 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