Кирсанов М.Н. Графы в Maple M.: Физматлит 2007
> | #Программа 35 c. 145 |
Задача коммивояжера (NVA)
> | restart: with(networks): new(G): |
> | V:=[a,b,c,d,f,g]: n:=nops(V): |
> | addvertex(V,G):addedge({[a,b],[b,c],[c,d],[d,f],[f,a], |
> | [a,f],[f,d],[d,c],[c,b],[b,a], |
> | [g,a],[g,b],[g,c],[g,d],[g,f], [b,g],[c,g]}, |
> | weights=[3,8,1,1,3, 1,3,8,3,3,3,3,3,5,4, 3,1],G): |
> | draw(G); |
> | G1:=duplicate(G): |
> | a0:=b:# Начальная вершина |
> | a1:=a0: sw:=0: |
> | s:=[a0]: |
> | for k to n-1 do |
> | for v in incident(a1,G1,Out) do |
> | if eweight(v,G1)=min(op(eweight([op(incident(a1,G1,Out))],G1))) |
> | then u:=v; sw:=sw+eweight(v,G1);break;fi; |
> | od: |
> | a2:=ends(u,G1)[2]; |
> | delete(a1,G1): |
> | a1:=a2:s:=[op(s),a2]: |
> | od: |
> | sw:=sw+eweight(op(edges([a2,a0],G)),G);#Сумма |
> | s;# Контур |
sw := 19
[b, a, f, d, c, g]