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

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

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.11.2012, 15:46   #1
armagedonakva
Новичок
Джуниор
 
Регистрация: 18.11.2012
Сообщений: 2
Печаль Задача с конем

Здравствуйте!
Тут такая проблема
есть прямоугольник. размеры задаются пользователем
и есть точка, откуда надо начинать движение, которая тоже задается пользователем. надо найти вариант обхода всего поля шахматным конем.
если есть какие-то идеи, поделитесь пожалуйста)
заранее спасибо
armagedonakva вне форума Ответить с цитированием
Старый 18.11.2012, 16:04   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Вся необходимая информация по алгоритму есть здесь

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

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

Эвристика всегда работает на досках от 5x5 до 76x76 клеток, при больших размерах доски конь может зайти в тупик.
Цитата:
Сообщение от Переборное решение
Другой способ решения задачи, состоит, очевидно, в переборе с отходом назад. Ниже дана иллюстрация подхода для доски 8x8.

Используем два одномерных массива row[64] и col[64] для хранения соответственно номеров строк и колонок, которые конь последовательно проходит по доске.

Конь, находящийся в позиции (i, j), может следующим ходом оказаться в клетках с координатами (i-2, j+1), (i-1, j+2), (i+1, j+2), (i+2, ,j+1), (i+2, ,j-1), (i+1, j-2), (i-1, j-2), (i-2, j-1). Заметим, что если конь находится вблизи края доски, то некоторые ходы могут вызвать перемещение коня за ее пределы, что, конечно же, недопустимо. Восемь возможных перемещений коня могут быть заданы в виде двух массивов ktmov1[] и ktmov2[], как продемонстрировано в следующем фрагменте программы.

Исходя из этого, конь, находящийся в позиции (i, j) может переместиться в позицию (i+ktmov[k], j+ktmov2[k]), где k - какое-либо значение из диапазона 0 - 7, выбираемое из условия, что конь должен остаться на доске.
Ещё несколько алгоритмов описаны в википедии


Последний раз редактировалось EducatedFool; 18.11.2012 в 16:23.
EducatedFool вне форума Ответить с цитированием
Старый 18.11.2012, 18:22   #3
armagedonakva
Новичок
Джуниор
 
Регистрация: 18.11.2012
Сообщений: 2
По умолчанию

Спасибо за помощь
armagedonakva вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача"Ход конем" станислав16 Общие вопросы C/C++ 13 25.11.2018 15:58
Задача о ходе конем (ВАЖНО) Zz0ss Помощь студентам 2 01.08.2012 00:15
Ход конем skorpi Помощь студентам 3 08.09.2011 09:03
Ход конем на Си Ekатерина Помощь студентам 2 02.05.2010 15:41
Задача "Ход конем" WormsSs Общие вопросы C/C++ 14 29.11.2008 16:25