![]() |
|
![]() ![]() ![]() |
|
kiLLProg |
|
|||
Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 1.10.2008 Репутация: нет Всего: нет |
Здравствуйте. Я по одной книге реализовал уменьшенную версию игры в пятнашки, где за место 15и чисел 8. Самым простым поиском в ширину решается начальная комбинация
4, 1, 3 2, 0, 6 7, 5, 8 после 632 просмотров комбинаций, программа выдаёт выигрышное состояние 1, 2, 3 4, 5, 6 7, 8, 0 Но стоит мне ввести более сложную начальную комбинацию, программа не справляется. Манхэттенское расстояние реализовывал, но потом убрал. О возможных нерешаемых комбинациях я знаю, поэтому, записывал начальные значения с ява игры на телефоне =) Всего комбинаций чисел в игре восемь = 9! = 362 880. Для сохранения всех комбинаций, я заводил динамический массив на 100 млн. элементов, но мне это не помогло. Происходит выход за пределы массива. Даже массив зацикливал (после наполнения 5000 элемента начинал заполнять массив заново). У меня задача не решается в лоб, поиском в глубину. Похоже, где-то происходит зацикливание по графам всех возможных комбинаций. Вот исходник программы:
Помогите решить эту оочень интересную задачу. ![]() Это сообщение отредактировал(а) kiLLProg - 28.8.2012, 13:31 |
|||
|
||||
Pavia |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 418 Регистрация: 6.12.2008 Репутация: 11 Всего: 12 |
![]() Не все комбинации возможны получить перестановкой. |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 20 Всего: 454 |
Все возможные комбинации распадаются на две группы такие, что из любой позиции группы можно получить любую другую позицию той же группы.
![]() Так а какая задача-то? построить решение? оптимизировать поиск в ширину? убрать ляпы в коде? что-то ещё? Если построить решение - я бы просто пошёл по пути разработки критерия упорядоченности позиции. Полный перебор на 4-5 шагов (т.е. просмотр максимум 2к позиций), после чего движение в позицию максимального критерия, и следующий поиск. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
Lipetsk |
|
|||
![]() в форме ;) ![]() Профиль Группа: Участник Сообщений: 180 Регистрация: 28.1.2009 Где: Липецк Репутация: 2 Всего: 5 |
||||
|
||||
Lipetsk |
|
|||
![]() в форме ;) ![]() Профиль Группа: Участник Сообщений: 180 Регистрация: 28.1.2009 Где: Липецк Репутация: 2 Всего: 5 |
вот мое решение на lua
смысл его в горизонтальном обходе дерева комбинаций код приведенный kiLLProg пример решает за 74 просмотра и 6 ходов |
|||
|
||||
kiLLProg |
|
|||
Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 1.10.2008 Репутация: нет Всего: нет |
Да. Да. А вот разве нельзя обойтись без таких ухищрений? Ведь памяти у современных компов предостаточно, можно просто поиском в глубину обойтись. Вот только чувствую, что программа по графам где-то зацикливается и не находит решения. Спасибо за код, Lipetsk! ![]() ![]() Спасибо за идею!!! ![]() Подскажите пожалуйста какую-нибудь литературу про эту задачу, желательно с исходниками. |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 20 Всего: 454 |
Запросто. На SQL такая, как ты описываешь, таблица одним запросом создаётся, двумя - наполняется, и одним - получается решение. Сколько оно, правда, будет молотить - я хз... будет время - попробую. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
kiLLProg |
|
|||
Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 1.10.2008 Репутация: нет Всего: нет |
Я справился!! Ураа!!
![]() ![]() ![]() ![]() Главное - нужно отсекать повторы и использовать алгоритм А* ![]() Могу привести ооочень грязный код решения задачи. Это черновой вариант программы. Пользуйтесь на здоровье. Всем спасибо за советы.
Это сообщение отредактировал(а) kiLLProg - 29.8.2012, 14:40 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Алгоритмы" | |
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Алгоритмы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |