Кирсанов М.Н. Графы в 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]