|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Нахождение Эйлерового цикла (Графы)
Нахождение Эйлерового цикла выполняется по алгоритму Флёри.
Допустим граф задаётся следующей матрицей смежности Начало цикла пускай будет в вершине 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; Но при выполнении могут пройтись не все рёбра,т.к. выбирается случайная вершина . ЗЫ Пока писал,вспомнил,что вершина выбирается случайно,но "мост" выбирается,если нет других вариантов.Подскажите,как модифицировать,что бы учитывалось это? ЗЫЫ Могу скинуть всю программу того,что есть на данный момент. Последний раз редактировалось too lame, 17.12.2011 в 18:05. |
#2
|
|||
|
|||
Уже разобрался,спасибо.
|
#3
|
||||
|
||||
Так вот рассказал-бы, привел мысли которые тебя подвели к решению.. Как вариант - код выложил, с комментариями... Чтобы другие могли понять...
Некоторые программисты настолько ленивы, что сразу пишут рабочий код. Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты. |
#4
|
|||
|
|||
Да. Заодно не плохо бы написать, что такое "алгоритм Флёри" и "мост", а то в Delphi таких понятий нет. Да и как проверить, соответствует программа алгоритму или есть ошибки?
|