![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 21.12.2008
Сообщений: 5
|
![]()
Доброго времени суток...
Помогите решить задачку на Visual Prolog, если есть возможность... D общем ситуация следующая есть прорамма которая ищет максимальный путь и считает длину пути, это я сумел сделать но мне сказали что нужно программу "Поиск оптимального пути движения снегоочистительных машин с учетом приоритета дорог" Другими словами есть набор дорог, бусть это будет граф, у каждой дороги есть приоритет, вот надо сначала почистить дороги с максимальным приоритетом, потом меньшим, потом еще меньшим и самый маелнький. Как решить эту задачу не знаю, вот что смог сделать... Таким образом я пытался пройти по всем вершинам графа, как реализовать остальное не знаю ((. Буду очень признателен любой помощи... DOMAINS список=symbol* %Символьный список список1=integer* PREDICATES nondeterm принадлежит (symbol, symbol,integer,список,список1) nondeterm смежные (symbol, symbol,integer,список, список1) nondeterm граф (список) nondeterm время (список1) nondeterm путь (symbol, symbol, список, integer,integer) nondeterm путь1 (symbol, список,integer,список, список1,список, integer,integer) %nondeterm оптимальный_путь (symbol,список,integer,integer) %nondeterm список(список, integer) %nondeterm путь_короче (symbol,symbol,integer,integer) CLAUSES %Отыскание ветви в направленном графе %принадлежит (Y,Z,[Y,Z|_]). %принадлежит (Y,Z,[_,_|Хвост]):-принадлежит (Y,Z,Хвост). граф ([a,b, b,d, b,c, c,e, e,d, b,e, e,a]). %факт1 время ([3, 5, 6, 4, 3, 5, 6]). %факт2 путь (A,Z,Путь,Номер,Итог_время):- граф(Граф), время(Время), путь1 (A,[Z],0,Граф,Время,Путь,Номер,Итог_время ). %правило1 путь1 (A,[A|Путь1],Итог_время,_,_,Путь1,7,Итог_время) . %факт3 путь1 (A,[Z|Путь1],Время_пути1,Граф,Время,Путь,Номер, Итог_время):- Номер<7, смежные (Y,Z,Время_ветви,Граф,Время), not (принадлежит(Z, Y,_, Путь1,_)), not (принадлежит(Y, Z,_, Путь1,_)), Номер1=Номер+1, Время_пути=Время_пути1+Время_ветви, путь1 (A,[Y,Y,Z|Путь1],Время_пути,Граф,Время,Путь,Номер1, Итог_время). %правило2 принадлежит (Y,Z,Время_ветви,[Y,Z|_], [Время_ветви|_]). %факт4 принадлежит (Y,Z,Время_ветви,[_,_|Хвост1],[_|Хвост2]):- принадлежит (Y,Z,Время_ветви,Хвост1,Хвост2). %правило3 смежные (Y,Z,Время_ветви,A,Время):- принадлежит (Y,Z,Время_ветви,A,Время); принадлежит (Z,Y,Время_ветви,A,Время). %правило4 %оптимальный_путь (A,Путь,Номер,Итоговое_время):- путь (A,A,Путь,Номер,Итоговое_время). %оптимальный_путь (A,Путь,Номер,Итоговое_время):- путь (A,A,Путь,Номер,Итоговое_время), %Номер=0. %not(путь_короче(A,A,Номер,Итоговое _время)), %список(_, Путь, Счётчик). %список(Ф,[Ф|_], Счётчик). % факт1 %список([_|Хвост], Счётчик):- список(Хвост, Счётчик), Счётчик=Счётчик+1. % правило1 %путь_короче (A,Z,Номер,Итоговое_время):-путь (A,Z,_,Номер,Итоговое_время1),Итого вое_время1<Итоговое_время. GOAL %Отыскание ветви в направленном графе %принадлежит (Y,Z, [a,b, b,d, b,c, c,d, c,e, e,d, b,e, e,a]). %принадлежит (Y,e, [a,b, b,d, b,c, c,d, c,e, e,d, b,e, e,a]). %смежные (a,b, [a,b, b,d, b,c, c,d, c,e, e,d, b,e, e,a]). путь (a,a,Путь,0,_). %оптимальный_путь (a,Путь,0,_). |
![]() |
![]() |
![]() |
#2 |
Владимир М.
Участник клуба
Регистрация: 30.10.2006
Сообщений: 1,289
|
![]()
условие задачи неполное.
что есть почиcтить ? повторное прохождение по ребру допустимо ?
Берегите друг друга!
|
![]() |
![]() |
![]() |
#3 |
Регистрация: 21.12.2008
Сообщений: 5
|
![]()
Почистить это значит занести ребро в список чищенных дорог, если после чистки дороги зашли в тупик то реализовать возможность вернуться по этой дороге обратно чтобы чистить другую дорогу, но сначала я хотел сделать чтобы пройти по всем вершинам графа и занести их в список почищенных дорог в порядке их приоритета.
По дорогаям можно просто проезжать сколько угодно раз чтобы попасть к нечищенной дороге... |
![]() |
![]() |
![]() |
#4 |
Регистрация: 21.12.2008
Сообщений: 5
|
![]()
Сначала я написал вообще другую программу, но думаю для реализации новой поставленной задачи проще написать новую, чем переделать старую (. Забыл сказать количество приоритетов 4 шт.
|
![]() |
![]() |
![]() |
#5 |
Регистрация: 21.12.2008
Сообщений: 5
|
![]()
Есть список дорог Пример.jpg Нужно создать список очищенных дорог в который будут входить дороги сначала с приоритетом 1, потом 2 и т.д....,
По завершению очистки вернуться в точку, начала движения. По чищенным и нечищенным дорогам можно ездить сколько угодно раз, чтобы добраться до нечищенной дороги... |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Поиск пути в лабиринте - Пролог | yulia | Помощь студентам | 15 | 21.08.2010 00:14 |
если пользователь наберет какой-то другой символ не "y" или "n" и нажмет enter, программа проигнорирует | skobets | Общие вопросы C/C++ | 2 | 03.06.2008 06:51 |
Excel файл открывается не "до конца" (странички "не показываются" только серое поле) | Dorvir | Microsoft Office Excel | 2 | 28.03.2008 10:03 |
"Транспортная задача", "Поиск решения" | Perroman | Microsoft Office Excel | 3 | 12.12.2007 17:12 |
Создаю диаграмму "Bar". Подскажите как убрать растояние между "столбами" | MAcK | Компоненты Delphi | 11 | 24.10.2007 10:49 |