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

>    #Программа 34 c. 144

Гамильтоновы циклы

>    restart: with(networks): new(G):  

>    V:=[a,b,c,d,g]:   n:=nops(V):

>    addvertex(V,G):

>    addedge({{a,c},{a,d},{b,g},{b,c},

>            {c,d},{d,g},[a,g],[a,b]},G):

>    draw(G);

>    B:=Matrix(n):C:=Matrix(n):P:=Matrix(n):

>    A:=adjacency(G);# Матрица смежности

[Maple Plot]

A := Matrix(%id = 150706072)

>    for i to n do

>      for j to n do

>        if A[i,j]=1 then B[i,j]:=V[j];fi;

>      od;

>    od;

>    C:=A:

>    for k to n-1 do

>       for i to n do

>         for j to n do

>          P[i,j]:=expand(subs(V[i]=0,V[j]=0,add(B[i,m]&*C[m,j],m=1..n)));

>         od;

>       od;

>       for i to n do for j to n do C[i,j]:=P[i,j];od;od;

>      if k<>(n-1) then for i to n do  C[i,i]:=0; od;fi;

>    k,C;

>    od:

>    S:={}:

>    for i to n do

>      if C[i,i]<>0 then

>        S:=S union {expand(C[i,i]&*V[i])};fi;

>    od;

>    F:={}:

>     for q in S do

>      if whattype(q)=`+` then F:=F union {op(q)}

>                         else F:=F union {q}:

>     fi;

>    od;

>    S:=map(x -> convert(x,list),F):

>    for q in S do #Убираем короткие контуры

>      if nops(q)<>n then S:=S minus {q};fi;

>    od;

>    k:=nops(S):# Число помеченных контуров

>    H:={}:

Вершину 1 ставим на первое место в контуре

>    for j to k do

>      for i to n do #m-место 1-й вершины в контуре  

>        if S[j][i]=V[1] then m:=i;fi;

>      od;

>     for i to n do

>        Z[i]:=S[j][(i+m-2 mod n)+1];

>     od;

>    H:=H union {convert(Z,list)}:

>    od:

>    H;

{[a, b, g, d, c], [a, d, g, b, c], [a, c, b, g, d], [a, g, b, c, d]}