| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Алгоритмы > Алгоритм Форда |
| Автор: ReFLeXive 7.6.2010, 20:46 | ||
| Уже неделю мучаюсь с заданием: нужно найти наибольшую пропускную способность пути между парой вершин. Пропускной способностью пути называется наименьший вес дуги этого пути. Вот описание алгоритма: http://hcinsu.chat.ru/algoritm/sort/ford.html Вот что я написал:
Для тестов использую простейший граф как на рисунке во вложении. Проблема вот в чем. если я ищу пропускную способность из 1 в 4, то получается вот что: есть 2 пути (1,2,4 и 1,3,4 ), их пропускные способности равны 1 и 1 соответственно; итого макс. пропускная способность = 2, все верно! А вот если искать пропускную способность из 1 в 2, то по моему коду при 1м проходе найдется путь 1,2 с пропускной способностью 1, а при 2м проходе путь 1,3,4,2 не будет найден, потому что в методе haveAnyEdge в цикле счетчику присвоится значение 4 (int i = startEdge + 1). Соответственно, после 4й вершины в вершину 2 мы не попадем.... Подскажите плиз какие нить идеи, как мне переделать, чтобы находились все возможные пути в графе между 2 любыми вершинами? |
| Автор: ReFLeXive 8.6.2010, 12:36 |
| По сути, мне нужно получить все возможные пути из начальной вершины в конечную! Думал насчет алгоритма Дейкстры... |
| Автор: esperanto 8.6.2010, 13:11 | ||
Так как путей экспоненциальное число, подойдет любой экспоненциальный алгоритм. Перебор например |
| Автор: ReFLeXive 8.6.2010, 20:45 |
Перебор я по сути написал, вот только он не совсем корректно работает - не все пути находит, тк. при нахождении каждого пути из графа удаляется ребро наименьшего веса, принадлежащее найденному пути... |
| Автор: MaxPayneC 10.6.2010, 09:17 |
| ReFLeXive, почитайте статью http://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D1%82%D0%BE%D0%BA_%D0%B2_%D0%B3%D1%80%D0%B0%D1%84%D0%B5 |
| Автор: esperanto 10.6.2010, 13:18 | ||
Так напишите корректный перебор. Кто вам мешает |