![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| fuckingniger |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 223 Регистрация: 1.10.2010 Репутация: нет Всего: 1 |
Задан неориентированный граф. Необходимо вывести все циклы.Не поможете?
Можно исключить лишние вершины - только не уверен чтов этом есть смысл. Это сообщение отредактировал(а) fuckingniger - 6.3.2011, 22:47 |
|||
|
||||
| alexvs11 |
|
|||
|
hell is here ![]() ![]() Профиль Группа: Участник Сообщений: 518 Регистрация: 21.8.2010 Репутация: 6 Всего: 10 |
первое, что приходит в голову - рекурсивный обход, по-ходу ведем журнал вершин, если какаята вершина повторяется - значит есть цикл
вообщеж наверняка тьма алгоритмов для этого есть Добавлено через 2 минуты это напоминает поиск решения в лабиринте в своей мере тоже граф - перебираем все варианты исключая циклы |
|||
|
||||
| fuckingniger |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 223 Регистрация: 1.10.2010 Репутация: нет Всего: 1 |
||||
|
||||
| fuckingniger |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 223 Регистрация: 1.10.2010 Репутация: нет Всего: 1 |
||||
|
||||
| alexvs11 |
|
||||
|
hell is here ![]() ![]() Профиль Группа: Участник Сообщений: 518 Регистрация: 21.8.2010 Репутация: 6 Всего: 10 |
ну это и правда несложно
|
||||
|
|||||
| alexvs11 |
|
|||
|
hell is here ![]() ![]() Профиль Группа: Участник Сообщений: 518 Регистрация: 21.8.2010 Репутация: 6 Всего: 10 |
как видите не только для деревьев
|
|||
|
||||
| fuckingniger |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 223 Регистрация: 1.10.2010 Репутация: нет Всего: 1 |
как много стандартных функций.Надо изучить некоторые такие как find
а можете, если не сложно в двух словах описать алгоритм? Программа работает отлично! |
|||
|
||||
| alexvs11 |
|
||||
|
hell is here ![]() ![]() Профиль Группа: Участник Сообщений: 518 Регистрация: 21.8.2010 Репутация: 6 Всего: 10 |
все очень просто
матрица смежности (вроде так) журнал - путь, в него будем добавлять уже посещенные вершины вызываем процедуру с начальным состоянием пустым журналом ищем в матрице смежности состояния в которые можем перейти из текущего, вообщем возможные переходы далее проделываем действия для каждого возможного перехода
проверяем бывали ли мы уже в этом состоянии, в которое хотим перейти, если бывали - имеем цикл если в этом состоянии еще не были то
добавляем состояние в журнал, берем его за начальное и продолжаем рекурсию после выхода из рекурсии удаляем состояние из журнала, чтобы продолжить движение по другому пути можно иметь свой журнал для каждого пути, но это более накладно после выхода из рекурсии выбираем другой возможный путь |
||||
|
|||||
| fuckingniger |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 223 Регистрация: 1.10.2010 Репутация: нет Всего: 1 |
Спасибо.Пара часов втыкания и стало ясно)) сложная штука эта рекурсия.
Добавлено через 2 минуты и 6 секунд это как, я понимаю, аналог поиска вглубину? |
|||
|
||||
| alexvs11 |
|
|||
|
hell is here ![]() ![]() Профиль Группа: Участник Сообщений: 518 Регистрация: 21.8.2010 Репутация: 6 Всего: 10 |
||||
|
||||
| fuckingniger |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 223 Регистрация: 1.10.2010 Репутация: нет Всего: 1 |
вот, что я написал.Ну собственно отдичаетсятолько тем, что выводит циклы длиннее 3 элементов. вопрос такой. при графе (все связи в обе стороны) ![]() он выводит:
как бы избежать повторения без прямого сравнения(или без использования цикла)??? Это сообщение отредактировал(а) fuckingniger - 8.3.2011, 21:23 |
||||
|
|||||
| alexvs11 |
|
|||
|
hell is here ![]() ![]() Профиль Группа: Участник Сообщений: 518 Регистрация: 21.8.2010 Репутация: 6 Всего: 10 |
да заметил тоже такое
это происходит изза того что пути 0-1-2-3-4-2 и 0-2-3-4-2 разные, но циклы одни надо подумать будет Это сообщение отредактировал(а) alexvs11 - 8.3.2011, 21:24 |
|||
|
||||
| fuckingniger |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 223 Регистрация: 1.10.2010 Репутация: нет Всего: 1 |
это я тож понял) .просто в задании прям так и сказано(избегая повторений) циклы кстати тоже нельзя использовать.так что думаю как последний while убрать Это сообщение отредактировал(а) fuckingniger - 8.3.2011, 21:34 |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |