|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
05.11.2007, 00:11 | #1 |
Новичок
Джуниор
Регистрация: 05.11.2007
Сообщений: 2
|
Поиск Эйлерова цикла в графе
Доброй ночи всем присутствующим.
Помогите пожалуйста решить проблему. Пол-интернета обыскал, но так и не нашел нормального алгоритма для поиска эйлерова цикла в графе по заданной матрице смежности. Может быть кто-нибудь его выложит? Если есть, можно исходники на C/C++,Java. Спасибо за внимание, заранее благодарен. |
05.11.2007, 08:42 | #2 | ||
Реанимируюсь...
Участник клуба
Регистрация: 19.07.2007
Сообщений: 1,445
|
Поиск Эйлерова цикла в графе. Реализация.
Нахождение Эйлерова пути за O (M)
Эйлеров путь - это путь в графе, проходящий через все его рёбра. Эйлеров цикл - это эйлеров путь, являющийся циклом. Задача заключается в том, чтобы найти эйлеров путь в неориентированном мультиграфе с петлями. Алгоритм. Сначала проверим, существует ли эйлеров путь. Затем найдём все простые циклы и объединим их в один - это и будет эйлеровым циклом. Если граф таков, что эйлеров путь не является циклом, то, добавим недостающее ребро, найдём эйлеров цикл, потом удалим лишнее ребро. Чтобы проверить, существует ли эйлеров путь, нужно воспользоваться следующей теоремой. Эйлеров цикл существует тогда и только тогда, когда степени всех вершин чётны. Эйлеров путь существует тогда и только тогда, когда количество вершин с нечётными степенями равно двум (или нулю, в случае существования эйлерова цикла). Таким образом, идея такая же, как и в алгоритме, работающем за O (M2), представленного здесь. Однако реализация этой идеи будет несколько другой, что даст нам линейную сложность отосительно числа рёбер. Рассмотрим такую рекурсивную функцию: Цитата:
Далее, этот же алгоритм мы можем записать в нерекурсивном варианте: Цитата:
Итак, реализация всего алгоритма: (ищет эйлеров цикл или путь в графе, или выводит -1, если его не существует) Код:
P.S.:Нашел во второй половине Интернета . Взято с: http://maximal.hocomua.ru/euler_path_linear.htm
Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте.
Правила форума => Правила раздела => Для общего развития => Помощь студентам => Перед тем, как создавать тему, скачайте себе... P.S.: форум не песочница (с)
название статьи на сайте MS: "Отмена принудительного отключения автоматического запуска в реестре Windows" |
||
26.01.2009, 21:06 | #3 |
Новичок
Джуниор
Регистрация: 26.01.2009
Сообщений: 1
|
Напишу спустя год. Интересует это программа, но есть проблемы с векторами. Подскажите люди как осуществить здесь ввод, лучше сразу пример ввода, а то понять не могу =/
|
22.05.2010, 18:47 | #4 |
Новичок
Джуниор
Регистрация: 14.04.2009
Сообщений: 1
|
Здравствуйте! А ни у кого нет решения данной задачи на языке Lisp? Ввод графа может быть и иным
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Поиск разделяющих вершин в произвольном графе... | Agnazar | Помощь студентам | 4 | 29.05.2008 22:51 |
Поиск цикла длины 4. | <Бананан> | Помощь студентам | 33 | 25.05.2008 20:10 |
Нахождение эйлерова цикла, косяк | vendigo | Общие вопросы C/C++ | 1 | 22.11.2007 14:14 |
Оператор цикла с предусловием While. Оператор цикла с пост условием Repeat | McMilin | Помощь студентам | 7 | 11.11.2007 14:10 |
поиск Р - абсолютных центров в графе | grinders | Помощь студентам | 1 | 14.01.2007 09:57 |