![]() |
|
![]() ![]() ![]() |
|
max07 |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 178 Регистрация: 21.12.2004 Репутация: нет Всего: нет |
Добрый день,
может есть у кого реализация такого алгоритма? Или ссылку можете дать какую полезную? Спасибо. |
|||
|
||||
comp |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 61 Регистрация: 15.11.2006 Репутация: 1 Всего: 1 |
Ну блин...
Идеш в глубину, вершину, в которую только что зашел, кладёш в стэк. Приэтом, удаляеш рёбра, по которым ходиш... Если из какой-то вершины некуда идти, помещаеш её во второй стэк, а из первого удаляеш... Ну и в итоге во втором стэке будут нужные те циклы... Схема примерно такая... массив C - кол-во инцедентных вершин у i-й вершины. e - наш граф. v - вершина, с которой начинать... ну, если в графе более 2х вершин, степень которых нечётная, то естественно, в таком графе циклов нет... если таких вершин - две, то надо начинать с любой из них... иначе - без разницы. stack <int > st1, st2 st1.push(v); for (; !st1.empty();) { v = st1.top() if (!c[v]) { st2.push(v); st1.pop(); continue; } it_v = e[v].begin(); c[v]--; c[*it_v]--; st1.push(*it_v); e[v].erase(it_v); } |
|||
|
||||
esperant0 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 714 Регистрация: 20.5.2005 Репутация: 4 Всего: 14 |
Цикл можно построить за постоянное время. Берете две вершины соединяете двумя ребрами. Вот и эйлеров цикл готов
-------------------- Student->Teacher Assistant ->Research assistant->Microsoft Software Development Engineer Пользователь получил наказание за то, что проигнорировал замечание которое было написано модератором а затем стерто и которое он - пользователь не мог видеть. |
|||
|
||||
max07 |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 178 Регистрация: 21.12.2004 Репутация: нет Всего: нет |
А как лучше хранить граф для этой задачи?
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Алгоритмы" | |
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Алгоритмы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |