|
1 / 1 / 0
Регистрация: 30.09.2016
Сообщений: 7
|
|
Задача с конями на шахматной доске01.12.2018, 16:28. Показов 5166. Ответов 14
Метки нет (Все метки)
Помогите, пожалуйста, разобраться с алгоритмом задачи. Долго думаю и не знаю с чего вообще начинать.
На шахматной доске размером N*N находятся некоторое количество коней. Их изначальные координаты передаются на вход приложению. Эти кони ходят одновременно и стремятся сойтись в одной точке за минимальное количество ходов. Несколько коней могут находиться в одной точке в любой момент времени. Программа должна рассчитать оптимальную точку, в которой они сойдутся, и минимально возможное количество ходов до этого. Если таких точек несколько, необходимо вывести их все. В этом задании отдельные кони могут пропускать ход.
1
|
|
| 01.12.2018, 16:28 | |
|
Ответы с готовыми решениями:
14
Задача с конями на шахматной доске Описать решение задачи на шахматной доске с конями Задача о Шахматной доске |
|
294 / 265 / 48
Регистрация: 09.04.2013
Сообщений: 1,038
|
|
| 01.12.2018, 20:57 | |
|
Нужно уточнение - нужно найти клетку до которой максимальное количество шагов от стартовой позиции любого коня будет минимально?
Могу предложить простое но не самое быстрое решение. Берем матрицу Н*Н, заполняем числами "-1", на ней делаем обход в ширину для первого коня - клетки матрицы должны содержать минимальное количество шагов за которое конь дойдет до этой клетки, стартовую позицию берем за ноль. Делаем такую же для следующего коня, числа из неё прибавляем к числам в первой матрице, если в одной из матриц стоит число "-1", то оно должно быть в первой матрице. И так далее - считаем расстояния полного обхода для коня, прибавляем к первой матрице, оставляя числа "-1" Ответом будет та ячейка первой матрицы, у которой наименьшее значение, но не -1.
1
|
|
|
Вездепух
12919 / 6787 / 1817
Регистрация: 18.10.2014
Сообщений: 17,169
|
|
| 02.12.2018, 08:24 | |
|
(Специально зашел, чтобы найти этот вопрос и здесь.)
Задача недостаточно ясно сформулирована. Что такое "ход"? Считаются количество "тактов", в течение которых все кони одновременно делают (или не делают) ход? Или "ходом" считается каждое индивидуальное перемещение каждого коня? * Если задача состоит в минимизации количества "тактов" во время каждого из которых все кони одновременно делают ход, то это фактически задача нахождения минимальной охватывающей окружности в "метрике коня". Ее центр (возможно - центры, в дискретном случае) и будет той точкой, к которой должны сойтись кони. Наверное можно адаптировать алгоритм Эмо Велзла для дискретной задачи в "метрике коня". * Если же количество ходов считается как сумма количества индивидуальных ходов каждого коня, то это похоже на поиск геометрической медианы. Ее можно искать методом градиентного спуска, как в алгоритме Вайзфельда. Однако из-за дискретности задачи можно выполнять итерации не по формуле Вайзфельда, а просто в лоб в окрестности текущего приближения. Начиная с доски 5x5 для значения "лошадиного" расстояния существуют аналитические выражения. В общем, если N не может быть очень большим, то можно просто построить полную матрицу значений целевой функции, а затем найти оптимальные точки для любого способа подсчета ходов. Для досок меньшего размера значения расстояния можно предрассчитать заранее. Скажем алгоритмом Флойда-Уоршелла.
1
|
|
|
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
|
||
| 02.12.2018, 13:24 | ||
|
Очевидный алгоритм такой: старт: читаем текущие координаты коня находим все допустимые шаги(например конь на краю или в углу и т.п.) получаем возможные координаты коня повторяем для всех коней считаем при каких коордианатх коней расстояние между ними минимально Если кони не в одной клетке тогда на старт.
0
|
||
|
Вездепух
12919 / 6787 / 1817
Регистрация: 18.10.2014
Сообщений: 17,169
|
||
| 02.12.2018, 19:40 | ||
|
Однако сам подход с генерацией промежуточных матриц для каждого коня выглядит расточительным. Зачем? Если вы уж собрались идти по пути построения полной таблицы значений целевой функции, то эту таблицу можно генерировать сразу, так как для содержимого ваших промежуточных матриц есть готовая формула (т.е. не надо делать никакого поиска в ширину для каждого коня).
0
|
||
|
294 / 265 / 48
Регистрация: 09.04.2013
Сообщений: 1,038
|
|
| 02.12.2018, 20:12 | |
|
Ну да, так то можно строить матрицу полного обхода один раз (поместив коня в угол), а дальше каждый раз ее использовать, лишь поставляя правильные индексы.
0
|
|
|
Вездепух
12919 / 6787 / 1817
Регистрация: 18.10.2014
Сообщений: 17,169
|
|||
| 02.12.2018, 20:32 | |||
|
Алгоритм wingblack решает задачу за O(N2M). Ваш вариант - за O(M2K) , где K - количество итераций до схождения (игнорируя пока необходимость найти все точки). Алгоритм нахождения минимальной охватывающей окружности, если удастся его приспособить, решит задачу за O(M). Хотя приспособить его, наверное, будет непросто... Добавлено через 9 минут Однако для досок меньше чем 5x5 также не работает правило переноса координат: для вычисления расстояния между двумя конями уже нельзя просто помещать одного из коней в угол. Но эта проблема тоже легко решается: для такой маленькой доски действительно можно просто заранее вычислить матрицу расстояний "от всех до всех" хоть алгоритмом Флойда-Уоршелла.
0
|
|||
|
392 / 294 / 121
Регистрация: 26.08.2016
Сообщений: 902
|
||||||
| 02.12.2018, 22:34 | ||||||
|
Формула расчета ходов между двумя точками:
2) Проверяем все соседние клетки. Если где-то есть число меньшее, чем текущий минимум, то забываем прочие клетки, считаем вокруг нового минимума и так пока вокруг всех клеток с минимальным значением будут проверены расстояния. 3) Массив клеток с минимальным значением и будет ответом на вопрос.
0
|
||||||
|
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
|
||
| 02.12.2018, 22:41 | ||
|
Это наверно многовариантные расчеты…наверно только перебор.
0
|
||
|
294 / 265 / 48
Регистрация: 09.04.2013
Сообщений: 1,038
|
||
| 02.12.2018, 23:56 | ||
|
Я вот подумал, для больших N лучше начать с клетки которая будет решением в обычной метрике, а потом проверять в некотором радиусе по формуле для коней какая клетка будет решением в метрике коней. Вот только какой радиус лучше взять не могу придумать.
0
|
||
|
Вездепух
12919 / 6787 / 1817
Регистрация: 18.10.2014
Сообщений: 17,169
|
|||
| 03.12.2018, 00:02 | |||
|
Также в вашей формуле содержится ошибка: на доске любого размера расстояние от (2, 2) до (1, 1) получается 4 вместо 2.
0
|
|||
|
392 / 294 / 121
Регистрация: 26.08.2016
Сообщений: 902
|
||||
| 03.12.2018, 00:08 | ||||
0
|
||||
|
Вездепух
12919 / 6787 / 1817
Регистрация: 18.10.2014
Сообщений: 17,169
|
||||
| 03.12.2018, 00:34 | ||||
|
Если бы коням не разрешалось пропускать ход, то результатом была бы только одна точка - посередине. Так что ни о каком "не имеет смысла" речи быть не может.
0
|
||||
|
392 / 294 / 121
Регистрация: 26.08.2016
Сообщений: 902
|
||||
| 03.12.2018, 00:45 | ||||
|
0
|
||||
|
Модератор
3132 / 2279 / 469
Регистрация: 26.03.2015
Сообщений: 8,870
|
|
| 03.12.2018, 13:26 | |
|
Нужно для каждого коня найти список точек, в которые он может попасть за 1 ход. Если пересечение таких списков ненулевое, то это ответ. Иначе повторяем для 2 ходов. И так далее.
0
|
|
| 03.12.2018, 13:26 | |
|
Помогаю со студенческими работами здесь
15
Задача о шахматной доске. Задача о зёрнах на шахматной доске Задача о муравьях на шахматной доске Задача о зёрнах на шахматной доске Задача о зернах на шахматной доске Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|