Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Общие вопросы по программированию, компьютерный форум
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.11.2013, 20:12   #1
Аnn111
 
Регистрация: 30.11.2013
Сообщений: 7
По умолчанию Эвристический поиск в лабиринте

Помогите плиз!!Срочно надо)
лабиринт представляет собой систему комнат,соединенных между собой переходами.В лабиринте имеется вход и выход,а также комната с золотым кладом.Кроме того,имеются комнаты,запрещенные для посещений:комната монстров и комната разбойников.
1)Найди путь в лабиринте от входа до входа,не посещая дважды одной и той же комнаты.
2)Найти путь с посещением золотой комнаты.
3)Найти путь,избегающий запрещенных к посещению комнат.
4)Подсчет количество пройденных комнат.
Аnn111 вне форума Ответить с цитированием
Старый 01.12.2013, 01:19   #2
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

на прологе, наверное?
rrrFer вне форума Ответить с цитированием
Старый 01.12.2013, 18:21   #3
Аnn111
 
Регистрация: 30.11.2013
Сообщений: 7
По умолчанию

Цитата:
Сообщение от rrrFer Посмотреть сообщение
на прологе, наверное?
Да,на прологе,помогите с кодом)
Аnn111 вне форума Ответить с цитированием
Старый 02.12.2013, 08:46   #4
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Я думаю, начать надо с построение графа переходов.
комната монстров и комната разбойников - вершины, в которые нет ни одной входящей дуги.
Потом останется только запустить поиск в ширину или в глубину на этом графе.

Что именно не получается?
И на каком прологе?
rrrFer вне форума Ответить с цитированием
Старый 05.12.2013, 11:57   #5
Аnn111
 
Регистрация: 30.11.2013
Сообщений: 7
По умолчанию

я вообще не могу понять,с чего начинать,P# Prolog,вы говорите,что нужно использовать граф-это и есть мой лабиринт в виде графа,я правильно поняла?
Аnn111 вне форума Ответить с цитированием
Старый 05.12.2013, 11:57   #6
Аnn111
 
Регистрация: 30.11.2013
Сообщений: 7
По умолчанию

Цитата:
Сообщение от rrrFer Посмотреть сообщение
Я думаю, начать надо с построение графа переходов.
комната монстров и комната разбойников - вершины, в которые нет ни одной входящей дуги.
Потом останется только запустить поиск в ширину или в глубину на этом графе.

Что именно не получается?
И на каком прологе?
я вообще не могу понять,с чего начинать,P# Prolog,вы говорите,что нужно использовать граф-это и есть мой лабиринт в виде графа,я правильно поняла?
Аnn111 вне форума Ответить с цитированием
Старый 05.12.2013, 17:18   #7
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Цитата:
это и есть мой лабиринт в виде графа,я правильно поняла?
правильно, вцелом.

Нужен граф состояний игры, но в вашем случае состояние - это положение в лабиринте, поэтому граф-лабиринт сойдет.
rrrFer вне форума Ответить с цитированием
Старый 18.12.2013, 16:54   #8
Аnn111
 
Регистрация: 30.11.2013
Сообщений: 7
По умолчанию

это эвристический поиск,можете проверить на ошибки,очень надо!
route(room1,room2,4).
route(room2,gold,3).
route(room2,monsters,5).
route(room2,monsters,4).
route(gold,razb,2).
route(razb,room3,7).
route(monsters,room3,2).
route(gold,room3,4).
move(room1,room2,monsters):-route(room1,room2,monsters);route(r oom2,room1,monsters).


member(H,[H|_]).
member(H,[_|Tail]):-member(H,Tail).

place([],SortedWays,SortedWays).
place([Way|Tail],PrevWays,SortedWays):-placeone(Way,PrevWays,PrevWays1),pl ace(Tail,PrevWays1,SortedWays).

placeone(Length:Way,[LengthH:WayH|Tail],[Length:Way,LengthH:WayH|Tail]):-Length=<LengthH,!.
placeone(LengthWay,[LengthHWayH|Tail],[LengthHWayH|NewTail]):-placeone(LengthWay,Tail,NewTail).
placeone(LengthWay,[],[LengthWay]).

search_bst(Start,Finish):-
bst([0:[Start]],Finish,Length:Way),
show_answer(Way),nl,write('Length of way: '),write(Length).

bst([Length:[Finish|Tail]|_],Finish,Length:[Finish|Tail]).
bst([TempWay|OtherWays],Finish,Way):-
findall(W,prolong(TempWay,W),Ways),
place(Ways,OtherWays,NewWays),bst(N ewWays,Finish,Way).

show_answer([_]):-!.
show_answer([room1,room2|Tail]):-
show_answer([room2|Tail]),nl,write(room2),write(' -> '),write(room1).




count([],0).
count([1|Tail],Y1):-count(Tail,Y), Y1 is Y+1.
Аnn111 вне форума Ответить с цитированием
Старый 18.12.2013, 18:19   #9
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

твоя задача решена тут с подробными комментариями: http://pro-prof.com/archives/1299
на SWI Prolog. Вместо спасибо можешь жамкнуть кнопку гугл+ или оценить сайт в web of trust, например.

"Эвристический" поиск подразумевает использование какой-то догадки (которая, в общем случае, не гарантирует результат). Для твоей задачи я такой догадки придумать не могу.
rrrFer вне форума Ответить с цитированием
Старый 18.12.2013, 18:27   #10
Аnn111
 
Регистрация: 30.11.2013
Сообщений: 7
По умолчанию

спасибо большое!А на турбо прологе пойдет?
Аnn111 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск пути в лабиринте. Маршрутный алгоритм. C# Wanz Помощь студентам 9 17.03.2013 18:56
Поиск кратчайшего пути в лабиринте Java Omnikus Фриланс 1 15.12.2011 20:46
Поиск пути в лабиринте - Пролог yulia Помощь студентам 15 21.08.2010 00:14
поиск маршрута в лабиринте. Delphi 7 savraska Помощь студентам 2 16.05.2010 14:29
Поиск пути в лабиринте s2dentishe Помощь студентам 2 13.03.2010 18:36