![]() |
|
Модераторы: Snowy, MetalFan, bems, Poseidon |
![]()
|
|
| d3mon4eg |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 10.1.2010 Репутация: нет Всего: нет |
Привет уважаемые делфи эксперты!
Пытаюсь найти ошибку в коде, но не могу. Задача на поиск максимального потока транспортной сети. Кто не в курсе, кратко объясню алгоритм на пальцах: 1) строим ориентированные графы, на ребрах заполняем "с" - максимальную пропускную способность. изначально f=0 у каждых ребер графа. 2) далее выписываем все возможные пути от х до z. Пример ![]() 3) берем первый путь, увеличиваем значение переменной "f" на минимальное число "С" по данному пути (которое тоже должно на ребрах подписываться) 4) если с=f, берем это ребро и отмечаем галочками в списке путей из пункта 2, ребра которых совпали с текущим 5) далее берем путь не отмеченный галочкой. Если мы уже проходили по одному ребру (тоесть f заполнена), то "с" этого ребра будет c:=c-f; 6) затем повторяем действия с шага 3. И так пока весь список путей не отметиться галочками. 7) далее смотрим пути которые не дошли от x до z и прибавляем +1 к "f", повторяя с шага 3, пока не дойдем до z. (ЭТОТ ШАГ ЕЩЕ НЕ ДЕЛАЛ В ИСХОДНИКЕ) Вот как это выглядит: ![]() В моей проге нужно сначала насоздавать достаточное кол-во вершин двойным кликом по пустому месту на форме. Затем кликаем на одну вершину, затем на другую - они соединяются стрелкой и сразу фокус переводится на поле для заполнения "С" данной вершины. И так соединяем все вершины. Затем жмем кнопку "Посчитать", затем "Минимальное С" ПРОБЛЕМА: не заполняется список путей полностью галочками, не все значения "с" и "f" считаются правильно. Доходят до определенного места, и значения идут в минуса. Исходник:
Из дополнительных компонентов юзал TMS, Alphaskins, вроде все. Если кто делал такую прогу выложите плиз. PS гуглил, по форуму искал. Все найденные варианты НЕ в графическом виде реализованы (нужно наглядные графы (вершины, ребра)), как у меня. Да и к тому же они были очень сложные, не смог понять код. Премного благодарен. |
|||
|
||||
| DarkProg |
|
|||
![]() Законченный романтик ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1784 Регистрация: 11.3.2009 Где: Земля Репутация: 4 Всего: 19 |
Первая ошибка состоит в том что ты начинаешь подсчёт уже после того как нашёл все пути, начинай подсчёт во время поиска путей, так будет проще правильнее
И ты неправильно ищещь максимальный поток, максимальный поток определяется путём у которого наименьшее ребро как можно больше, в твоём примере максимальный поток равен 6(так мне объясняли), а ты зачем-то пребавляешь наименьшее ребро - мне непонятно как ты ищешь, кинь ссылку, где ты это вычитал. Вообще странно, меня учили так как я написал, хотя я был не согласен с тем что не преподавали, ну просто вроде как по твоей системе если правильно всё распределить, то дойдёт 9, это при правильном распределении и если одновременно отправить максимум из Х в вершину 1 и 2, ну в общем интересно...
ну насчёт перебора всех путей я уже написал; проблема с минусами связана с тем что ты там что-то отнимаешь(я не понял зачем), если походить по всем путям во время их определения, то проблем не должно возникнуть. Извини, но у меня пока нет времени и нужных компонентов -------------------- "И твоя голова всегда в ответе за то куда сядет твой зад..." "Я студент - скажите с какого я ВУЗа..." |
|||
|
||||
| d3mon4eg |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 10.1.2010 Репутация: нет Всего: нет |
Даже не знаю. Нас учили сначала выписывать все возможные пути (моя прога справилась с этой задачей).
Вообще ответ не должен быть одним числом. Весь построенный граф с посчитанными значениями, это и будет ответ. Я это НЕ из книг взял. Весь алгоритм нам так объяснили. Даже помню 5 за это получил на контрольной
и на том спасибо |
||||||
|
|||||||
| DarkProg |
|
|||
![]() Законченный романтик ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1784 Регистрация: 11.3.2009 Где: Земля Репутация: 4 Всего: 19 |
Тебе обязательно нужно следовать чётким инструкциям??? Я вот тебе скажу, что если будешь всё считаь во время нахождения всех путей, то твоя прога заработает как минимум в 2 раза быстрее Просто совет на будущее: нужно думать чтобы твоя прога летала не на Пентиуме4 с 2 гб ОЗУ и +побольше видюхи, а на расчитывать чтобы она лётала на i486 с 2 мб ОЗУ и 2 мб видеопамяти Просто максимальный поток это и есть одно число, а как ты ещё узнаешь максимум сколько пройёт по твоему пути??? -------------------- "И твоя голова всегда в ответе за то куда сядет твой зад..." "Я студент - скажите с какого я ВУЗа..." |
|||
|
||||
| d3mon4eg |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 10.1.2010 Репутация: нет Всего: нет |
да, наверно так и есть. Щас уже не вспомню.
Ну можно и как ты говоришь. Я обычно и стараюсь так делать. Но щас более важна скорость написание программы, а не работы, т.к. не сегодня-завтра мне ее нужно сдавать. Если не сдам, плакал мой автомат по дискретной математике |
||||
|
|||||
| DarkProg |
|
|||
![]() Законченный романтик ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1784 Регистрация: 11.3.2009 Где: Земля Репутация: 4 Всего: 19 |
Я попробую помочь, но для этого выложи всю папку с проектом, а то с одним кодом тяжело набросать проект
P.S. для облегчения веса архива удали скомпилированный еxe-шник Добавлено через 8 минут и 1 секунду Пpuмep. Paccмoтpим ceть, зaдaннyю нa pиcунке. Tpeбyeтcя нaйти мaкcимaльнo вoзмoжный пoтoк из yзлa 1 в yзeл 7. Bычиcлим пpoпycкнyю cпocoбнocть ключeвыx ceчeний. Имeeм пpoпycкнaя cпocoбнocть ceчeния {(1,2), (1,3)} paвнa 4, пpoпycкнaя cпocoбнocть ceчeния {(2, 4), (3, 5)} paвнa 4, пpoпycкнaя cпocoбнocть ceчeния {(1, 3), (2, 3), (6, 7)}paвнa 5, пpoпycкнaя cпocoбнocть ceчeния {(5,7), (6,7)} paвнa 2. Cpaвнивaя пpoпycкныe cпocoбнocти ceчeний, пoлyчaeм, чтo мaк-cимaльный пoтoк oтвepшины 1 к вepшинe 7 paвeн 2. Это пример оттуда откуда мне давали, может тебе чем-то поможет. Присоединённый файл ( Кол-во скачиваний: 11 )
image003.jpg 5,58 Kb-------------------- "И твоя голова всегда в ответе за то куда сядет твой зад..." "Я студент - скажите с какого я ВУЗа..." |
|||
|
||||
| d3mon4eg |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 10.1.2010 Репутация: нет Всего: нет |
У нас все таки немногу по другому. У нас ориентированные графы, это которые со стрелками, тоесть движение возможно только в одно направление. Эти графы вроде как могут вычислять пропускную способность дорог и электрических проводов.
Вот, держи исходник. Там нужно установить компоненты tms и alphaskins. Но впринципе можно заменить лейблы sLabel стандартными, кнопки sButton тоже. Единственное sCheckListBoxEx. Это где пути с галочками, скрин наверху. Я использовал массив записей для облегчения. Этот массив записей - ребра (не путай только с вершинами). У него несколько использованных свойств: 1) tracking[x].dot1 - начальная точка и tracking[x].dot2 - конечная (если их сложить то буит например x2) 2) tracking[x].track - булевый индикатор, проходил ли уже по этому пути 3) tracking[x].с и tracking[x].f - значения пропускной способн. и Фи Присоединённый файл ( Кол-во скачиваний: 19 )
routing.rar 761,58 Kb |
|||
|
||||
| d3mon4eg |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 10.1.2010 Репутация: нет Всего: нет |
ВНИМАНИЕ! Переписал полностью на Delphi 7 без сторонних компонентов !!!!!!
Выкладываю исходник, помогите до завтра. Присоединённый файл ( Кол-во скачиваний: 49 )
___delphi_7.zip 471,51 Kb |
|||
|
||||
| d3mon4eg |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 10.1.2010 Репутация: нет Всего: нет |
Всем спасиба, мне уже помогли
|
|||
|
||||
| DarkProg |
|
|||
![]() Законченный романтик ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1784 Регистрация: 11.3.2009 Где: Земля Репутация: 4 Всего: 19 |
-------------------- "И твоя голова всегда в ответе за то куда сядет твой зад..." "Я студент - скажите с какого я ВУЗа..." |
|||
|
||||
![]()
|
| Правила форума "Delphi: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |