|
0 / 0 / 0
Регистрация: 28.11.2019
Сообщений: 38
|
||||||
Динамическое программирование / метод "Разделяй и властвуй"08.11.2022, 18:52. Показов 2306. Ответов 30
Метки нет (Все метки)
Условие:
«Одинокий король» долго ходил по бесконечной шахматной доске. Известна последовательность из N его ходов (вверх, вниз, влево, вправо, вверх-влево и т.п.). Написать программу, определяющую побывал ли король дважды на одном и том же поле за минимально возможное при заданном N число вычислений. Мой код (рабочий):
0
|
||||||
| 08.11.2022, 18:52 | |
|
Ответы с готовыми решениями:
30
Метод «разделяй и властвуй» Метод "Разделяй и властвуй" Разделяй и властвуй |
|
0 / 0 / 0
Регистрация: 28.11.2019
Сообщений: 38
|
|||
| 09.11.2022, 11:59 [ТС] | |||
|
Что смущает в выводе? Если король попадает на место, в котором уже был, выводится сообщение и номера ходов на которых обнаружены совпадения. Далее идет список формата: номер хода: x_короля_на_данном_ходу y_короля_на_данном_ходу (сделано для наглядности и возможности проверки результата)
0
|
|||
|
0 / 0 / 0
Регистрация: 28.11.2019
Сообщений: 38
|
|
| 12.11.2022, 22:10 [ТС] | |
|
Тема актуальна
0
|
|
|
|
|||
| 13.11.2022, 00:45 | |||
|
xmmmm, я вот, не уверен, что до конца понял что требуется, а остальные и вовсе не хотят вникать в эту муть.
Там, где вы берете эти дурацкие задания - там и задавайте вопросы. Если спрашиваешь тут - будь добр пояснить в чем именно у тебя загвоздка. Решать твою идиотскую задачу никто не будет.
0
|
|||
|
0 / 0 / 0
Регистрация: 28.11.2019
Сообщений: 38
|
|||||
| 14.11.2022, 09:07 [ТС] | |||||
|
0
|
|||||
|
|
|||||||
| 14.11.2022, 09:47 | |||||||
|
Что значит это:
ArrayList<Integer> moves?И это int[][] move = {{-1, 1}, {0, 1}, {1, 1}, {1, 0}, {1, -1}, {0, -1}, {-1, -1}, {-1, 0}};?Для чего сохраняются пункты меню: moves.add(menu);? Что это дает?Как я понял задачу: король ходит по полю, согласно выбору направления (меню движения). После выхода из меню (пункт 9) нужно подсчитать сколько клеток он прошел более одного раза и вывести координаты этих клеток. Возможное решение: записываем координаты ходов в массив visited[0][0], затем прочесываем его на предмет одинаковых координат. Координаты, которые встречаются более одного раза - выводим в консоль.Эту задачу действительно можно разбить на несколько подзадач, но вот применение рекурсии видится мне излишним (не очевидным). Добавлено через 1 минуту Да, и тут явно напрашивается применение мапы (map).
0
|
|||||||
|
0 / 0 / 0
Регистрация: 28.11.2019
Сообщений: 38
|
|||||||||||||
| 14.11.2022, 16:38 [ТС] | |||||||||||||
visited[][], так наверное было бы правильней, но у меня сначала все ходы вводятся, а потом, после завершения ввода (пункт 9 меню) вычисляются координаты на каждом ходу, соответственно чтоб не терять данные вводимые пользователем я их добавлял в лист moves.int[][] move = {{-1, 1}, {0, 1}, {1, 1}, {1, 0}, {1, -1}, {0, -1}, {-1, -1}, {-1, 0}};. Пример: пользователь вводит 2 пункт меню (ход вверх), смотрим на массив move, 2 элемент массива "{0, 1}" как раз позволяет нам рассчитать тот самый ход вверх, то есть к текущей позиции x нужно прибавить 0, а к текущей позиции y прибавить 1. (можно было бы switch case какой нибудь, или if'ами поиздеваться, но такой вариант тоже имеет место быть, как мне кажется) Вот это допустим является подзадачей, или надо разбивать на еще более мелкие?
0
|
|||||||||||||
|
|
|||||
| 14.11.2022, 17:21 | |||||
|
1
|
|||||
|
|
||||||
| 15.11.2022, 02:06 | ||||||
|
xmmmm, короче, для начала:
Кликните здесь для просмотра всего текста
Понимаю, чо вряд ли ты тут что-то понимаешь, но дело не в этом. Самый главный тут класс Point, который можно впихнуть в HashSet<>. Ну и... подсчитать кол-во не вошедших туда точек Point. Их, кстати, можно собирать в отдельный Map<>. В общем, на что фантазии хватит. А с фантазией сегодня не очень... "Погуляли" после работы... Извини.
1
|
||||||
|
|
|||
| 15.11.2022, 02:26 | |||
|
Добавлено через 2 минуты moveN() && moveW() это движение на Северо-Запад, при котором должны быть оба true. Это вверх и влево.Но если вверх закончилось, а на влево клетки есть - иди спокойно на W )) Добавлено через 1 минуту
0
|
|||
|
|
|||||||||||
| 15.11.2022, 02:29 | |||||||||||
|
wizard41, конкретный пример, когда он сдвинулся, хотя не должен был:
0
|
|||||||||||
|
|
||
| 15.11.2022, 02:38 | ||
|
и почему ты
king.chess передаешь в параметр moveNW?У данного экземпляра короля уже есть доска внутри King(new Point(0,7), ChessMate).Добавлено через 4 минуты Point сделано все что нужно. Но он излишен. Показан лишь для того, чтобы ТС понял что такое точка - позиция фигуры. Теперь, если у объекта Короля вызывать соотв. перемещения, то все должно работать нормально. Но у Короля я сделал только два move - это вверх и вниз. Остальное, пусть додумает хозяин вопроса. Ну или я сам завтра допишу.
0
|
||
|
|
|||||||||||
| 15.11.2022, 02:40 | |||||||||||
|
Короче, я думаю, что надо заменить диагональные методы:
2
|
|||||||||||
|
|
|||
| 15.11.2022, 02:55 | |||
|
Но не забывай о том, что мы показываем свою версию решения людям, которые... вообще не которые... Я исхожу из этого, хотя тоже не всегда. Поэтому стараюсь раскидывать более-менее внятно, прям по строкам. Для авторов это вполне зашибись. Я, хоть и начинающий Java'ист, но все же обладаю уже такими познаниями, что могу решить шахматные задачи с помощью "крутых" фишек Java.Core, типа стримов и мапов. Но что это даст вопрошающему? Ровным счетом ничего. Coffeini, но если ты действительно заметил "косяк" в моем варианте - смело говори. Код писал уже "под градусом", мало ли что не заметил..
0
|
|||
| 15.11.2022, 02:55 | |
|
Помогаю со студенческими работами здесь
20
Разделяй и властвуй Возвести число A в степень N методом разделяй и властвуй Сортировка массива на основе алгоритма «разделяй и властвуй» Разделяй и властвуй, поиск пары ближайших точек Вычисляем по методу „divide et impera” (разделяй и властвуй) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла:
Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
|
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога
Финальные проекты на Си и на C++:
finish-text-sdl3-c. zip
finish-text-sdl3-cpp. zip
|
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
|
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo
Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло.
Но на выплатах по больничным это. . .
|
|
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
|
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y
Z4Tv2zpXVVo
https:/ / github. com/ shumilovas/ med2. git
|
Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа.
В качестве фильтра для отбора справочника служит группа номенклатуры.
Отбор по наименованию группы. . .
|
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
|