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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.10.2012, 15:49   #1
VIGANTI
Новичок
Джуниор
 
Регистрация: 09.10.2012
Сообщений: 2
Вопрос Ладья на шахматной доске C++

Здравствуйте Уважаемые форумчане,

Хотел бы попросить у Вас помощи в решении задачки на этот семестр, к сожалению сам не владею программированием =(

1. Шахматное поле размером 5х5 (S=k*k) => (k>=5)
2. Имеются шахматные фигуры в количестве 23 шт. (k^2-1>q)
3. Имеется ладья (1 шт.)
4. F [1...q] = массив координат шахматных фигур на шахматной доске S
5. J = координаты ладья на шахматной доске S


Задача:
Нужно сбить ладьей (начальное местонахождение не имеет значение, в принципе как и местонахождения всех 23 фигур) все фигуры. Ладья подчиняется законам шахмат (за один ход можно сбить 1 фигуру, перескакивать через фигуру нельзя). В целом нет никаких условий на счет как будет ходить ладья, или ещё что то, просто необходимо сбить все фигуры. Учитывая что в задаче проситься сделать это лучшим способом, то бишь за меньшее количество ходов, но чисто логично - 23 фигуры=23 хода ладьей, но в целом программа после удара какой то фигуры может перейти на пустую клетку, и естественно это тоже нужно видно включить в программу. Общее количество ходов ограниченно 2q (в нашем случае 46 ходов)

Выходной алгоритм:
Кратчайшее последовательность полей, на которых ладья захватывает все шахматные фигуры. Выход состоит из двух текстовых файлов. Первый описывает начальную конфигурацию, а второй последовательности полей, где ладья останавливается во время захвата фигуры.

Заранее благодарен Вам за ответ!

С уважением,
VIGANTI вне форума Ответить с цитированием
Старый 09.10.2012, 20:11   #2
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,312
По умолчанию

Предполагаю, что алгоритм мог бы быть таким:
Пригоняем ладью к центру - попутно сбиваем фигуры. Далее по спирали.
Поскольку пустые поля не играют роли, то число ходов может быть равно числу установленных фигур. Не более того.
Или гоним ее на край доски и далее снова по спирали.


Как-то так ...
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 09.10.2012, 20:15   #3
VIGANTI
Новичок
Джуниор
 
Регистрация: 09.10.2012
Сообщений: 2
По умолчанию

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


Как-то так ...
Спасибо за ответ =)

Логику выполнения я уже знаю, можно и по спирали, можно "змейкой", по любому лучше чем 23 хода не будет, так как 1 ход = 1 сбитая фигура. Но не более 46 ходов. Честно говоря вопрос именно стоит в реализации этой задачи в виде программного кода так как в программировании я вообще никакой
Если есть такая возможность, помогите пожалуйста =)
Ещё раз спасибо за ответ!
VIGANTI вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Соединение двух точек линией на шахматной доске #include <Markus> Общие вопросы C/C++ 2 12.06.2012 10:51
создать класс "Ладья на шахматной доске" в C++ kickerb Помощь студентам 2 23.06.2011 21:52
расставить 8 ладей на шахматной доске marry Помощь студентам 2 19.11.2010 22:08
Си/Си++ Слоны на шахматной доске Маришка_Курносова Помощь студентам 1 12.09.2010 01:02
монетки на шахматной доске! grimm_jow Общие вопросы C/C++ 2 31.01.2010 10:27