Нахождение Эйлерового цикла выполняется по алгоритму Флёри.
Допустим граф задаётся следующей матрицей смежности

Начало цикла пускай будет в вершине 1. Для наглядности граф :
Так вот при проходе мы выбираем любую вершину.Вот код нахождения
Код:
Function GetRandom (var WorkMatrix:SWorkMatrix;var row:integer):integer;
var j,i:integer; Vershini_s_1:array[0..9] of integer;
begin
j:=0;
randomize;
for i:=1 to 10 do
if WorkMatrix[i,row]=1 then
begin
Vershini_s_1[j]:=i;
inc(j);
end;
if j=0 then result:=0 else
result:=Vershini_s_1[random(j-1)];
end;
И собственно сам алгоритм :
Код:
tek_vershina:=start;
buffer:=getrandom(WorkMatrix,tek_vershina);//получаем случайное ребро
WorkMatrix[buffer,tek_vershina]:=0;
WorkMatrix[tek_vershina,buffer]:=0; //удаляем пройденное ребро
tek_vershina:=buffer;// изменяем текущую вершину
cycle:=inttostr(start)+'->'+inttostr(tek_vershina); //формируем цикл
while (getrandom(WorkMatrix,tek_vershina) <> 0)and(tek_vershina <> start) do
begin
buffer:=getrandom(WorkMatrix,tek_vershina);
WorkMatrix[buffer,tek_vershina]:=0;
WorkMatrix[tek_vershina,buffer]:=0;
cycle:=cycle+'->'+inttostr(buffer);
tek_vershina:=buffer;
end;
Но при выполнении могут пройтись не все рёбра,т.к. выбирается случайная вершина .
ЗЫ Пока писал,вспомнил,что вершина выбирается случайно,но "мост" выбирается,если нет других вариантов.Подскажите,как модифицировать,что бы учитывалось это?
ЗЫЫ Могу скинуть всю программу того,что есть на данный момент.