Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ход конем, вчера написал :-) 
:(
    Опции темы
Darksquall
  Дата 22.3.2004, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 326
Регистрация: 22.1.2004
Где: Москва

Репутация: нет
Всего: 4



Рассмотрим создание программы Обхода доски шахматным конем.
Ход коня можно описать как перепрыгивание через клетку (фигуру)
и движение на 1 клетку в сторону.

Можем написать роцедуру заполняющая массив доступных
клеток на шахматной доске из текущей позиции goriz,vert.

procedure VozmojnieHodi(goriz:integer;vert:integer);
begin
VozmHodiVert[1]:=vert-1; //Записываем возможные ходы

для текущей клетки
VozmHodiGoriz[1]:=goriz-2;

VozmHodiVert[2]:=vert-2; //2
VozmHodiGoriz[2]:=goriz-1;

VozmHodiVert[3]:=vert-2; //3
VozmHodiGoriz[3]:=goriz+1;

VozmHodiVert[4]:=vert-1; //4
VozmHodiGoriz[4]:=goriz+2;

VozmHodiVert[5]:=vert+1; //5
VozmHodiGoriz[5]:=goriz-2;

VozmHodiVert[6]:=vert+2; //6
VozmHodiGoriz[6]:=goriz-1;

VozmHodiVert[7]:=vert+2; //7
VozmHodiGoriz[7]:=goriz+1;

VozmHodiVert[8]:=vert+1; //8
VozmHodiGoriz[8]:=goriz+2;
end;

Также необходимо учитывать размеры доски при переходе на следующую

клетку,т.к. можем
оказаться за пределами доски.
Затем последовательно ходим на доступные клетки,полученные из

VozmojnieHodi,одновременно
проверяем полученные координаты на доступность клетки(координаты

должны находиться в
пределах границ доски),создаем процедуру которая будет вызывать

сама себя(рекурсия) и при каждом ходе определят доступные клетки

из текущей позиции.При выходе из процедуры пробуем пойти на

следующую доступную клетку на которой еще не были.Таким образом

перебирая последовательно все варианты клеток на доске,мы

приближаемся к решению задачи.Следует учесть что некоторые доски

не имеют решения:
Если произведение сторон доски нечетно и сумма координат

начальной позиции нечетна, то решения не существует также
не существует ни одного обхода при N, M < 3; N = 3, M = 5, 6; N =

M = 4;
имеется как минимум одна клетка, из которой возможен обход доски

при N = 3, M = 4; N = 3, M >= 7; N >= 4, M >= 5.Программу

рекомендую запускать без режима вывода на экран,т.к. затормаживает

обход.
Прогу качаем с
Ход конем
самораспаковывающийся архив.
Удачи.

Это сообщение отредактировал(а) Darksquall - 22.3.2004, 13:45


--------------------
PM WWW ICQ   Вверх
Alex101
Дата 22.3.2004, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 891
Регистрация: 8.4.2002
Где: Москва

Репутация: 1
Всего: 10



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

Это сообщение отредактировал(а) Alex101 - 22.3.2004, 16:55


--------------------
С уважением, А. Фролов.
PM MAIL ICQ   Вверх
Darksquall
Дата 22.3.2004, 17:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 326
Регистрация: 22.1.2004
Где: Москва

Репутация: нет
Всего: 4



Да в принципе пробовал я на Athlone 2500 доска 8x8 заняла у меня 5 минут.Пока не оптимизировал алгоритм но про Правило Вансдорфа уже почитал.Главное что уже первая версия проги есть. rolleyes.gif


--------------------
PM WWW ICQ   Вверх
Alex101
Дата 22.3.2004, 18:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 891
Регистрация: 8.4.2002
Где: Москва

Репутация: 1
Всего: 10



Цитата(Darksquall @ 22.3.2004, 14:19)
Да в принципе пробовал я на Athlone 2500 доска 8x8 заняла у меня 5 минут.

Что-то долго...
Посмотри, может где можно что ускорить.
При простом бэктрекинге (без стоимостей) она должна минуты три-четыре считать на 386м...


--------------------
С уважением, А. Фролов.
PM MAIL ICQ   Вверх
Darksquall
Дата 23.3.2004, 10:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 326
Регистрация: 22.1.2004
Где: Москва

Репутация: нет
Всего: 4



просто там в цикле несколько проверок.Т.к планирую делать не стандартные доски,Например в форме звезды или бублика :-) с четным количеством клеток


--------------------
PM WWW ICQ   Вверх
Darksquall
Дата 1.4.2004, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 326
Регистрация: 22.1.2004
Где: Москва

Репутация: нет
Всего: 4



Ура заработало быстрее,время отнимала application.processmessages и совместная обработка изображения.Я отделил графику от обработки


--------------------
PM WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0422 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.