Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/21: Рейтинг темы: голосов - 21, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 13.06.2018
Сообщений: 18

Найти такой путь из клетки [i1, j1] в клетку [i2, j2], чтобы сумма чисел по данному пути была минимальной

07.03.2019, 08:28. Показов 4708. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, есть такая задача:

1.Дан двумерный числовой массив размером N1xN2.
2.Найти такой путь из клетки [i1,j1] в клетку [i2,j2], чтобы сумма чисел по данному пути была минимальной.
3.Из каждой клетки массива допустимо двигаться вправо, влево, вверх или вниз. В клетки с нулями заходить нельзя.
4.Числа i1,i2,j1,j2 вводятся с клавиатуры.

Задача на динамическое программирование, понимающие, помогите пожалуйста с алгоритмом, код сам могу написать.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.03.2019, 08:28
Ответы с готовыми решениями:

В матрице найти такой путь от первой колонки к последней, чтобы сумма чисел пройденных по пути была минимальная
Ребят, нужен алгоритм. Формируется двумерная таблица из случайных цифр 1-9. Нужно найти такой путь от первой колонки таблицы к последней,...

В таблице из N строк и N столбцов клетки заполнены цифрами от 0 до 9. Требуется найти такой путь из клетки (1, 1) в клетку (N, N
В таблице из N строк и N столбцов клетки заполнены цифрами от 0 до 9. Требуется найти такой путь из клетки (1, 1) в клетку (N, N), чтобы...

Найти такой путь из клетки (1,1) в клетку (А, В), чтобы сумма чисел равнялась заданному числу К
Помогите написать программу к задаче Дано шахматную доску размером М на N. Шахматная фигура "мини-тура" может перемещаться...

12
Заблокирован
07.03.2019, 08:32
Цитата Сообщение от Котананас Посмотреть сообщение
помогите пожалуйста с алгоритмом
обход графа в ширину/глубину
0
0 / 0 / 0
Регистрация: 13.06.2018
Сообщений: 18
07.03.2019, 12:00  [ТС]
А другие варианты решения есть ?
0
Заблокирован
07.03.2019, 12:30
волной вроде тоже годится, а те чем плохи?
0
0 / 0 / 0
Регистрация: 13.06.2018
Сообщений: 18
07.03.2019, 14:31  [ТС]
Обход графа в ширину - это и есть волновой обход не ? Просто волновой алгоритм мне нужно использовать в следующем задании, не в этом, данное же задание нужно решить без использования графов.
0
Параллельный Кот
 Аватар для valen10
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
07.03.2019, 14:46
Котананас, волновой алгоритм реализуется без использования графов и в первоначальном своем виде решает задачу поиска пути без учета стоимости прохода. Впрочем, вы же сами обозначили тему динамическое программирование.

Алгоритм.
1. Создать таблицу 1, в которую будет записываться оптимальная стоимость прохода в каждую ячейку на данном этапе оптимизации.
2. В начальную ячейку записать стоимость ее посещения, остальные ячейки заполнить числом -1.
3. Создать новую таблицу 2 аналогично таблице 1.
4. Выполнить просмотр всех ячеек таблицы 2 в цикле.
4.1 Если текущая ячейка проходима (стоимость посещения > 0), то выбрать одну из проходимых ячеек слева, справа, сверху или снизу в таблице 1, стоимость прохода для которой минимальна.
4.2 Записать в текущую ячейку таблицы 2 стоимость прохода до выбранной ячейки + стоимость посещения текущей ячейки.
5. Переписать значения из таблицы 2 в таблицу 1.
6. Повторять шаги 3-5 до тех пор, пока есть хотя бы одна оптимизация.
7. После завершения цикла конечная ячейка таблицы 1 содержит минимальную стоимость прохода до нее.

Чтобы сохранить маршрут, можно создать еще одну таблицу, в которой отмечать, какая из ячеек была выбрана для оптимизации.
1
Параллельный Кот
 Аватар для valen10
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
07.03.2019, 16:46
Сейчас заметил, что алгоритм получился не очень удачный: он делает больше шагов, чем требуется. Можно попробовать адаптировать алгоритм Дейкстры. Если получится, выложу сюда.
1
0 / 0 / 0
Регистрация: 13.06.2018
Сообщений: 18
07.03.2019, 17:33  [ТС]
Спасибо.
0
Параллельный Кот
 Аватар для valen10
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
07.03.2019, 23:13
Лучший ответ Сообщение было отмечено Котананас как решение

Решение

При внимательном рассмотрении алгоритма Дейкстры выясняется, что он несколько избыточен для данной задачи. В графе больше свободы, чем в таблице. Попытки его упрощения приводят к волновому алгоритму с задержками. В отличие от базового его варианта, волна должна задерживаться в клетке на указанное количество шагов. Чтобы не просматривать все клетки в поиске следующего шага, можно использовать приоритетную очередь, из которой первыми извлекаются элементы с наименьшей оценкой.

Алгоритм.
1. Создать таблицу d, в которой все элементы равны -1, элемент (i1, j1) равен стоимости посещения данной ячейки.
2. Поместить в очередь координаты (i1, j1).
3. Извлечь из очереди координаты (i, j) с минимальной оценкой d[i][j].
4. Рассмотреть соседние ячейки сверху, снизу, справа и слева. Если среди них есть доступные для посещения (стоимость > 0) и ранее не посещенные (d[i'][j'] < 0), записать для них в таблицу d сумму d[i][j] + стоимость посещения выбранной ячейки. Поместить координаты этой ячейки (i', j') в очередь.
5. Пока очередь не пуста, повторять шаги 3 - 4.

Восстановление пути: запись направлений во вспомогательный массив или поиск пути от (i2, j2) к (i1, j1) по ячейкам таблицы d с минимальной оценкой d[i][j].
2
0 / 0 / 0
Регистрация: 13.06.2018
Сообщений: 18
09.03.2019, 19:54  [ТС]
Ответьте пожалуйста:
1.На 3 этапе мы извлекли элемент с минимальной оценкой, куда этот элемент записывается ?
2.на 4 этапе "Поместить координаты этой ячейки (i', j') в очередь", какой именно, в которую мы записали "d[i][j] + стоимость посещения выбранной ячейки" ?
3.В 5-ом пункте, где именно нужно ставить это условие ?
0
Параллельный Кот
 Аватар для valen10
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
09.03.2019, 20:35
Цитата Сообщение от Котананас Посмотреть сообщение
1.На 3 этапе мы извлекли элемент с минимальной оценкой, куда этот элемент записывается ?
Его координаты записываются во временную переменную, чтобы можно было ссылаться на его соседей. В конце итерации о нем можно забыть, т.к. путь до него уже вычислен и он будет оптимальным (доказательство есть в алгоритме Дейкстры. Правда там еще одна оптимизация проводится, но в таблице ее можно не делать, т.к. в ней невозможны более короткие пути, как в графе).

Цитата Сообщение от Котананас Посмотреть сообщение
2.на 4 этапе "Поместить координаты этой ячейки (i', j') в очередь", какой именно, в которую мы записали "d[i][j] + стоимость посещения выбранной ячейки" ?
Да, координаты соседей, путь до которых был вычислен. Это могут быть не все соседи (или их может вообще не быть), если их путь до некоторых (возможно всех) из них уже был вычислен ранее.

Цитата Сообщение от Котананас Посмотреть сообщение
3.В 5-ом пункте, где именно нужно ставить это условие ?
Просто цикл while (!priority_queue.empty()), в котором будут выполняться действия шагов 3-4. Очередь можно сделать на обычном массиве/векторе с последующей сортировкой по убыванию. Нужный элемент всегда будет в конце и удаляется из массива за 1 шаг.

Если нужен код с примером реализации - скажите, выложу.
1
0 / 0 / 0
Регистрация: 13.06.2018
Сообщений: 18
10.03.2019, 16:46  [ТС]
Спасибо, сделал, а как реализовать такую тему как у вас, чтобы в реальном времени показывало как по массиву идем ?

Добавлено через 1 час 49 минут
Можете не отвечать, уже сделал.
0
0 / 0 / 0
Регистрация: 20.04.2021
Сообщений: 1
20.04.2021, 02:16
Добавлено через 7 минут
Цитата Сообщение от valen10 Посмотреть сообщение
Если нужен код с примером реализации - скажите, выложу
Можно увидеть этот код?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.04.2021, 02:16
Помогаю со студенческими работами здесь

Найти такой набор целых положительных чисел, чтобы их сумма была равна N
Доброго времени, форумчане! Весь вечер ломаю голову, на ум ничего не приходит. Задание. Написать программу,которая находит такой набор...

Какую наибольшую стоимость может иметь путь из клетки (1, 1) в клетку (n, m), если передвигаться за 1 шаг можно только на правую или нижнюю клетку.
кому не трудно помогите сделать. если не трудно вам написать код. Дана прямоугольная таблица nxn клеток. В каждой клетке содержится...

В дереве найти такой пусть, чтобы сумма узлов была равна заданному числу
Задача: В дереве найти такой пусть, чтобы сумма узлов была равна 50. В целом, понятно. У меня вышло найти тот узел, в котором эта...

В таблице клетки заполнены случайным образом цифрами от 0 до 9. Найти маршрут из клетки A(1,1) в клетку A(N,N)
В таблице NхN, клетки заполнены случайным образом цифрами от 0 до 9. Найти маршрут из клетки A(1,1) в клетку A(N,N) такой, что: 1) он...

Найти последовательность из трех чисел, чтобы их сумма была равна 10
Нужна помощь!!! Задание такое: Из текстового файла считать матрицу любой размерности. НАДО (ПО СТРОКАМ) найти последовательность из трех...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru