Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Серия вопросов по BGL 
:(
    Опции темы
woland
Дата 9.4.2007, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 22.8.2006

Репутация: нет
Всего: нет



начал работу над приложение тесно связанным с теорией графов. решил использовать BGL сейчас нужно реализовать серию функций которые на запросы пользователей отдавали маршруты из точки в точку, кратчайший из них и т.д.

Конкретно сейчас реализую функцию которая по входным данным (граф, вершина 1, вершина 2) возвращала бы набор маршрутов которые есть между этими вершинами.

Кто-то может уже писал такую? В BGL реализации подобной задачи не нашел.

Спасибо, за внимание.  smile 

Если что, я пионер в этом деле - больно не бейте.
PM MAIL WWW   Вверх
Earnest
Дата 9.4.2007, 16:52 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 53
Всего: 183



Поиск всех маршрутов - это простой перебор, что тут еще придумаешь.
Только нужно исключить циклы, иначе маршрутов будет бесконечное число.
Начинаем с вершины 1, идем по какому-нибудь ребру, если доходим до вершины 2, запоминаем маршрут, если упираемся во что-нибудь другое - выбрасываем. Затем возвращаемся к ближайшей развилке, копируем часть маршрута до нее, пытаемся пройти другим путем. И т.д., пока все развилки не кончатся. Естественно, ребра текущего маршрута нужно помечать, чтобы не ходить по ним многократно.

А тебе точно нужно все маршруты? Ибо задача о кратчайшем пути решается более элегантно, и такие алгоритмы в BGL есть.


--------------------
...
PM   Вверх
SerpentVV
Дата 9.4.2007, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 27.11.2006
Где: Астрахань

Репутация: 1
Всего: 1



Если в графе есть циклы, то количество маршрутов - бесконечно. Нужно наложить ограничения на маршрут. Например, маршруты диной не более К ребер. Или Эйлеровы маршруты, или Гамильтоновы маршруты.  
Если на ребра (или вершины навешены веса, то обычно ищут минимальные в некотором смысле пути.

Если граф ацикличный, то количество маршрутов конечно.
PM MAIL   Вверх
woland
Дата 10.4.2007, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 22.8.2006

Репутация: нет
Всего: нет



Пока пишу функцию на основе BGL и путем перебора буду искать маршруты, нужны именно все маршруты. Специфика задачи такая, что нужны все возможные маршруты. В BGL есть реализация некоторых алгоритмов поиска кратчайшего пути, но вот чтобы все возможные - нет.
Задача у меня такая - составление графика движения поездов в метро. А там бывает лучше поезд пустить по более длинному маршруту, но пропустить другие поезда в это время или подобные этому ситуации, как следствие нужно знать множество маршрутов.

Лана напишу выложу - поругаете если захотите, есть у меня подозрения, что я неправильно с точки зрения концепции BGL использую эту библиотеку, просто потому что пока что мало опыта.
PM MAIL WWW   Вверх
SerpentVV
Дата 10.4.2007, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 27.11.2006
Где: Астрахань

Репутация: 1
Всего: 1



Воланд - я занимался этой задачей, даже вывел формулы для количества маршрутов на полном графе... Еще раз повторяю - ограничения на маршруты нужно делать... Например, запретить в маршруте появление одной и той же станции (вершины) - то есть, не разрешать проходить по циклу...

И еще...
Посмотри тему "Потоки в сетях", ключевые фамилии Форд-Фалкерсон... Это о пропускной способности ребер - то есть путей... smile



Это сообщение отредактировал(а) SerpentVV - 10.4.2007, 15:00
PM MAIL   Вверх
woland
Дата 10.4.2007, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 22.8.2006

Репутация: нет
Всего: нет



SerpentVV, 
Пасиб. Гляну. Я пока еще разбираюсь с идеологией BGL.
PM MAIL WWW   Вверх
SerpentVV
Дата 11.4.2007, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 27.11.2006
Где: Астрахань

Репутация: 1
Всего: 1



Библиотека достаточно сложная для понимания... Была книжка переводная - в издательстве Питер... Серия - библиотека программиста...


PM MAIL   Вверх
woland
Дата 11.4.2007, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 22.8.2006

Репутация: нет
Всего: нет



SerpentVV, 
Да, я ее распечатал.
PM MAIL WWW   Вверх
Lomir
Дата 12.4.2007, 01:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 30.1.2007
Где: Lithuania::Kaunas

Репутация: 1
Всего: 1



ИМХО Если ненадо решать никаких замудренных задач. Например максимальны потом за O(m*n*log(n)), каскраска в 4 цвета, максимальное покрытие, гамильтонов цикл.
То разбирать библиотеку смысла нету. Проще написать то что нужно на лету.

А все возможные маршруты думаю можно искать, ДФСом убирая метку при выходе из вершины. 

Для более быстрого поиска можно попробовать следать динамику, сохраняя уже найденые маршруты к вершине в ней самой. В этом случае для хранения маршрутов лучше всего использовать битмаски, так как легко и быстро можно будет проверить уже найденые маршруты.
Эту динамику я придумал прямо сейчас, поэтому за 100% правильность алгоритма не ручаюсь.

PM MAIL ICQ Skype   Вверх
Mayk
Дата 12.4.2007, 02:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 45
Всего: 134



Цитата(Lomir @  12.4.2007,  05:00 Найти цитируемый пост)

Для более быстрого поиска можно попробовать следать динамику, сохраняя уже найденые маршруты к вершине в ней самой. В этом случае для хранения маршрутов лучше всего использовать битмаски, так как легко и быстро можно будет проверить уже найденые маршруты.
Эту динамику я придумал прямо сейчас, поэтому за 100% правильность алгоритма не ручаюсь.

AFAIR Строго говоря быстрый поиск всех маршрутов мало вероятен, потому как задача по определению самого длинного пути между двумя заданными вершинами в графе принадлежит классу NP полных задач. 

Это сообщение отредактировал(а) Mayk - 12.4.2007, 02:22


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
Earnest
Дата 12.4.2007, 11:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 53
Всего: 183



Цитата(Lomir @  12.4.2007,  02:00 Найти цитируемый пост)
То разбирать библиотеку смысла нету. Проще написать то что нужно на лету.

При таком подходе проще написать все самому. На лету - не получится. Т.е. получится, но ерунда наколенная.
BGL хороша не только своей реализацией, но и продуманностью подхода. Который, кстати, позволяет адаптировать свою библиотеку к BGL-интерфейсу, и использовать готовые алгоритмы.
И не так уж она сложна, просто на вид страшновато. Примерно как с STL, внутрь лучше (сразу) не заглядывать, а снаружи - все очень удобно и логично.


--------------------
...
PM   Вверх
Lomir
Дата 12.4.2007, 12:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 30.1.2007
Где: Lithuania::Kaunas

Репутация: 1
Всего: 1



Цитата

При таком подходе проще написать все самому. На лету - не получится. Т.е. получится, но ерунда наколенная.

Да, лучше, елси есть время, мозги и желания. Хоть бы разбираться потом будеш во всем до конца. Но некоторые вещи не так просто пишуться, поэтому время на них уйдет очень много, что тоже не есть хорошо.
Поэтому если надо что-то замудренное, то стоит изучить библиотеку + сам принцип алгоритма.
Но если надо БФС, ДФС, найти длину самого короткого пути, или минимальное остовное дерево - все функции в пределах 30-50 строк кода, то смысла изучать библиотеку думаю особо не имеет.
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0580 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.