Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 17.12.2011, 18:03
too lame too lame вне форума
Прохожий
 
Регистрация: 17.12.2011
Сообщения: 3
Репутация: 10
По умолчанию Нахождение Эйлерового цикла (Графы)

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

Начало цикла пускай будет в вершине 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  
Старый 17.12.2011, 23:48
too lame too lame вне форума
Прохожий
 
Регистрация: 17.12.2011
Сообщения: 3
Репутация: 10
По умолчанию

Уже разобрался,спасибо.
Ответить с цитированием
  #3  
Старый 18.12.2011, 00:55
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,906
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Так вот рассказал-бы, привел мысли которые тебя подвели к решению.. Как вариант - код выложил, с комментариями... Чтобы другие могли понять...
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием
  #4  
Старый 18.12.2011, 11:15
AlexSku AlexSku вне форума
Специалист
 
Регистрация: 07.05.2007
Адрес: Москва
Сообщения: 884
Репутация: 21699
По умолчанию

Да. Заодно не плохо бы написать, что такое "алгоритм Флёри" и "мост", а то в Delphi таких понятий нет. Да и как проверить, соответствует программа алгоритму или есть ошибки?
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 18:19.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter