![]() |
|
|
![]()
|
|
| en-horror |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 99 Регистрация: 13.7.2004 Репутация: нет Всего: нет |
народ вот мне задали задание высчитать максимальное количество ходов конем на шахматной доске размерами x y. Может посоветуете каким способом это можно сделать.
|
|||
|
||||
| Fantasist |
|
|||
|
Лентяй ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1517 Регистрация: 24.3.2002 Репутация: нет Всего: 41 |
Обычно я такие задачи решаю методом волнового заполнения. Выбираешь начальное поле и помечаешь его нулем. Потом все поля куда может пойти конь с этого поля помечаешь единицей. Потом проходишь по всем полям с единицей и помечаешь все поля куда может пойти конь с этих полей двойками. И так далее до полного заполнения - так получишь максимальное число ходов с определенной клетки.
-------------------- Волны гасят ветер... |
|||
|
||||
| en-horror |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 99 Регистрация: 13.7.2004 Репутация: нет Всего: нет |
Мда это идейка!!! Надо попробовать
|
|||
|
||||
| S.A.P. |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2664 Регистрация: 11.6.2004 Репутация: нет Всего: 71 |
Есть метод проще, он работает с ограниченным количеством клеток (максимум 64x64 где то так
Вроде понятно объяснил Это сообщение отредактировал(а) Perchilla - 5.10.2004, 22:06 |
|||
|
||||
| en-horror |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 99 Регистрация: 13.7.2004 Репутация: нет Всего: нет |
|
|||
|
||||
| Alex101 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 891 Регистрация: 8.4.2002 Где: Москва Репутация: 1 Всего: 10 |
Не всегда, просто сначала пытаешься пойти в такую клетку. Эта задача решается только полным перебором. Волновой алгоритм здесь не прокатит. Расставили мы единицы, а дальше? Надо хранить все варианты где-то. Все придет к тому же перебору, но еще париться с хранением... Проще рекурсия. Пусть доска D[N][N], Стоимость хранить в C[N][N]. Тогда порядок действий такой: Заполним матрицу C (сколько вариантов хода можно выбрать из каждой клетки). D заполнили нулями. Выбираем клетку D[i][j], где С[i][j]=min, D[i][j]=1, в матрице C изменили стоимость клеток (в клетку D[i][j] уже хода нет) 1. Выберем все варианты хода из D[i][j], расположим их в порядке возрастания стоимости Если ходов нет и D[i][j]=N*N то задача решена (или запоминаем max значение) Иначе Если ходы есть { Перебираем все варианты (по возрастанию стоимости) { Выбрали очередной ход в (i1,j1) Уменьшили стоимости в C Перешли к 1. } Вот примерно так, думаю, идея понятна -------------------- С уважением, А. Фролов. |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: нет Всего: 538 |
Для проверки можете использовать следующий факт: стандартную шахматную доску можно полностью обойти конем, не заходя в клетку дважды. И такой способ не один.
-------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 20 Всего: 454 |
Существует строгое доказательство того, что прямоугольную доску M*N (M>3, N>3) можно всю обойти конем, побывав в каждой клетке по разу.
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| III.nfo |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 18.10.2004 Репутация: 2 Всего: 2 |
А так:
12333321 23444432 34555543 34555543 34555543 34555543 23444432 12333321 точка - n ходов - n точек - n ходов итог 1 - 2 - 1*4= 4 - 2* 4= 8 2 - 3 - 2*4= 8 - 3* 8= 24 3 - 4 - 5*4=20 - 4*20= 80 4 - 6 - 4*4=16 - 6*16= 96 5 - 8 - 4*4=16 - 8*16=128 ------------------------------------------------- Итог 64 - 336 |
|||
|
||||
![]()
|
| Правила форума "Алгоритмы" | |
|
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Алгоритмы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |