Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.61/18: Рейтинг темы: голосов - 18, средняя оценка - 4.61
 Аватар для name?
201 / 172 / 52
Регистрация: 01.06.2010
Сообщений: 371

Задача "Сокобан"

26.07.2013, 15:59. Показов 3743. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ограничение времени: 5.0 секунды
Ограничение памяти: 64 МБ
Программист Стас на время отпуска устроился поработать в японскую компьютерную фирму Thinking Rabbit. Сначала идея казалась замечательной — и на халяву съездить за границу, и заработать, и набраться опыта у японских коллег. Но оказалось, что программисты без знания японского фирме не нужны, и Стаса отправили работать кем-то вроде кладовщика (по-японски его профессию называли Soko-ban).
Стас должен наводить порядок на складе, точнее, расставлять контейнеры с грузом по местам. Каждое утро Стасу дают бумажку со схемой очередного помещения и указанием, куда надо поставить контейнеры (почему-то начальству фирмы Thinking Rabbit не важно, какой именно контейнер куда поставить, главное, чтобы все контейнеры стояли только на отмеченных местах).
Однако, расставить их не так просто. Контейнеры большие и тяжелые, так что передвигать их можно, только толкая по полу, причем сил хватает лишь на один контейнер за раз. Кстати, контейнеры еще и гладкие, поэтому их можно толкать перед собой, но невозможно, например, тянуть за собой или поворачивать. Габариты помещения точно подогнаны под размеры контейнеров, поэтому Стас не может перебраться через контейнер, протиснуться между стоящими рядом контейнерами или пролезть между контейнером и стеной — он может ходить только по свободному пространству. Поэтому наведение порядка превращается в жуткую головоломку. А если решить её не удается или контейнер случайно попадает в какой-нибудь угол, из которого его не вытащить, то Стасу не позавидуешь. Дело в том, что стены склада сплошные, без выходов. Утром Стас попадает на склад через один из люков в потолке, а выйти из помещения он может только тогда, когда выполнит свою задачу. Умная система управления откроет люк для Стаса в нужном месте.
Помогите Стасу составить план перемещения контейнеров.
Исходные данные
На входе задана схема склада — прямоугольная сетка размером n × m (3 ≤ n, m ≤ 8). Пустое место обозначется пробелом, а объекты обозначаются следующими символами:
# — стены
. — пустое место, куда нужно поставить контейнер (цель)
@ — место, откуда начинает работу Стас
+ — место, откуда начинает работу Стас, если там находится одна из целей
$ — контейнер на пустом месте
* — контейнер на одной из целей
Гарантируется, что схема склада задана корректно, т.е. Стас не может выйти за его пределы. Количество контейнеров совпадает с количеством целей.
Результат
Выведите строку, описывающую план перемещений Стаса, при котором он расставляет контейнеры по конечным позициям. Все перемещения записываются буквами r, l, u и d (соответствующие четырем направлениям перемещений). Если при перемещении двигается контейнер, то буквы записываются в верхнем регистре (R, L, U и D соответственно). Длина строки не должна превышать 10000 символов. Можете считать, что решение всегда существует.
Примеры
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
исходные данные   результат
########
#@  $ .#                rrRR
########
 
 ######
##   .#
#@  ###              dddrrrruLdlUUUluRR
#   * #
#   $ #
#     #
#######
по идее чтоб решить эту задачу нужно знать волновой алгоритм(хотя думаю с ним просто по времени не впищемся) и все делать пошагово. У кого-то есть еще какие-то идеи как ее решать?)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.07.2013, 15:59
Ответы с готовыми решениями:

Сокобан на С++
Ребят, пишу курсовую на С++, игру Сокобан юзая Win 32 Api, может у когото есть желание помочь, или есть простенькие примеры этой игры(уж...

Сокобан, и построение дерева решений
Добрый вечер, уважаемые форумчане. Нужна помощь с лабой, которую я реально не могу самостоятельно оформить: Задание -...

Стало скучно, решил бахнуть "Сокобан"
Приветствую форумчан! :senor: Решил попробовать немножко посиплюсплюсить после сишарпинга. Всё-таки c++ это гламур, скорость, статическая...

9
 Аватар для Wolkodav
842 / 480 / 58
Регистрация: 18.09.2012
Сообщений: 1,688
26.07.2013, 16:09
Есть такой алгоритм A*, почитай, может поможет как-нибудь.

Добавлено через 2 минуты
Хотя его еще придётся модернизировать как-нибудь...
0
 Аватар для name?
201 / 172 / 52
Регистрация: 01.06.2010
Сообщений: 371
26.07.2013, 16:12  [ТС]
Цитата Сообщение от Wolkodav Посмотреть сообщение
Есть такой алгоритм A*, почитай, может поможет как-нибудь.

Добавлено через 2 минуты
Хотя его еще придётся модернизировать как-нибудь...
это и есть волновой алгоритм, тут скорее всего нужно использовать Алгоритм поиска пути Jump Point Search.
интересно вообще кто-то из форума пытался ее решить?
З.Ы. задача висит в топе сложнейших на acm.timus.ru
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
26.07.2013, 17:39
Цитата Сообщение от name? Посмотреть сообщение
интересно вообще кто-то из форума пытался ее решить?
Бугога...
https://www.cyberforum.ru/grap... ost4865241

Цитата Сообщение от Evg Посмотреть сообщение
Кстати, поищи коллекцию под названием "yoshio autogenerated". Там такие же маленькие уровни, но с тремя камнями. Они поинтереснее. В своё время я очень конкретно засел на одном уровне, аж написал программу, которая решение ищет
Могу продать, если найду

Добавлено через 2 минуты
Правда у меня было решение методом перебора (но такие маленькие уровни решались быстро). При этом глубину перебора нужно было задавать параметром. Т.е. если задача решаема за 10 ходов, а задано ограничение в 20 ходов, то программа найдёт решение, которое не более 20 ходов, и решение будет НЕ кратчайшим
0
1406 / 648 / 135
Регистрация: 11.08.2011
Сообщений: 2,299
Записей в блоге: 2
26.07.2013, 17:52
Evg, если бы можно сделать перебором, то эта задача не висела бы в топе сложнейших. Для поля 8*8 можно соорудить решение больше чем за 10 ходов, которые уже не отпереборит твоя программа. И тут, увы, TLE
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
26.07.2013, 18:00
Я и не говорю, что у меня идеальная программа и решает всё. Мне нужно было разрулить уровень 8 на 8, который мозгами я пройти не смог. Написал программу, она нашла решение, после чего я успокоился
0
 Аватар для name?
201 / 172 / 52
Регистрация: 01.06.2010
Сообщений: 371
26.07.2013, 18:50  [ТС]
Цитата Сообщение от Evg Посмотреть сообщение
Бугога...
https://www.cyberforum.ru/grap... ost4865241

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

Цитата Сообщение от Evg Посмотреть сообщение
Могу продать, если найду

Добавлено через 2 минуты
Правда у меня было решение методом перебора (но такие маленькие уровни решались быстро). При этом глубину перебора нужно было задавать параметром. Т.е. если задача решаема за 10 ходов, а задано ограничение в 20 ходов, то программа найдёт решение, которое не более 20 ходов, и решение будет НЕ кратчайшим
Продавать не нужно) если найдешь, то проверь пройдет ли все тесты на АСМ твоя программа
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
26.07.2013, 19:43
Цитата Сообщение от name? Посмотреть сообщение
Продавать не нужно
"Могу продать" - это собирательное выражение Не думаю, что кто-то согласится такую лажу купить

Цитата Сообщение от name? Посмотреть сообщение
то проверь пройдет ли все тесты на АСМ твоя программа
Это что такое?
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,536
Записей в блоге: 1
26.07.2013, 20:08
Цитата Сообщение от name? Посмотреть сообщение
З.Ы. задача висит в топе сложнейших на acm.timus.ru
какой смысл переписывать задачи с одного сайта на другой? Кто заинтересуется этой проблемой пойдёт на acm.timus.ru и решит её там!
1
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
26.07.2013, 23:46
Блин... я что-то подумал, что "АСМ" - это ассемблер...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.07.2013, 23:46
Помогаю со студенческими работами здесь

1589. Сокобан
Примеры 1исходные данные: ######## #@ $ .# ######## результат: rrRR Примеры 2исходные данные: ###### ## .# #@ ###

Логика Сокобан, на массиве
Здравствуйте, я новичок на форуме, если что-то неправильно делаю— прошу отнестись с пониманием. Нужно сделать игру сокобан на С#, основан...

ИИ (Бот) для игры Сокобан
Подскажите как можно зделать бота для поиска пути( наименьшего пути) для прохождения уровня к примеру в игре сокобан слышал о (Поиске в...

Бот (ИИ) для игры Сокобан
Подскажите как можно зделать бота для поиска пути( наименьшего пути) для прохождения уровня к примеру в игре сокобан слышал о (Поиске в...

Сокобан переделанный под нейронку
Задача сразу и тривиальная, и сразу нетривиальная. На поле выпадают ящики разных типов, всегда (для начала) в постоянных для каждого типа...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru