![]() |
|
![]() ![]() ![]() |
|
Alexandr87 |
|
|||
![]() дыкий псых ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1459 Регистрация: 27.11.2004 Где: Алматы, Казахстан Репутация: 1 Всего: 39 |
вощем есть задача, дана карта. Матрица m*n. Заполенная цифрам от 0 до 9. Есть стартовый и конечный пункт движения. Для простоты будет считать стартовым левый верхний угол матрицы. А конечный пункт правый нижний.
Нужно попасть из начального пункта движения в конечный пункт движения. Продвигать можно по вертикали и горизонтали. Нужно найти такой маршрут, при прохождении по которому сумма цифр в клетках по которым лежит маршрут была минимальной. Вот я тут написал, но она глючит. Скорее всего происходит переполнение стека.
|
|||
|
||||
podval |
|
|||
![]() Где я? Кто я? ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3094 Регистрация: 25.3.2002 Где: СПб Репутация: 18 Всего: 62 |
Если дело не в алгоритме, то может это в раздел Дельфи? |
|||
|
||||
Alexandr87 |
|
|||
![]() дыкий псых ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1459 Регистрация: 27.11.2004 Где: Алматы, Казахстан Репутация: 1 Всего: 39 |
Он уже лижит в паскале, с темой "ошибка". Но там люди говорят, что мол алгоритм кривой (может быть и такое так как писал в спешке.)
Так вот, нужно чтоб ктондь посотрел на это, разобрался и сказал, что не так (если таковое имеется). Или может есть какие еще мысли |
|||
|
||||
maxim1000 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 33 Всего: 110 |
если вопрос по алгоритму, то его лучше описать словами, а то код читать очень неудобно, да и большое количество людей, программирующих, например, на C и не знающих Pascal, отсекается
-------------------- qqq |
|||
|
||||
Alexandr87 |
|
|||
![]() дыкий псых ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1459 Регистрация: 27.11.2004 Где: Алматы, Казахстан Репутация: 1 Всего: 39 |
Ну лано тады вощем:
Задание Написать программу, которая по заданной карте определить наиболее удобный маршрут из пункта А в пункт Б. Карта представляет собой двумерный массив с элементами целочисленного типа. Каждый элемент массива содержит цифру в десятичной СС (от 0 до 9). Наиболее удобным считается маршрут, при прохождении которого сумма цифр, содержащихся в элементах, находящихся на маршруте будет минимальной. Входные данные: координаты начальной точки движения и конечной точки движения размерность карты ну и собественно сама карта. Мой алгоритм решения Существует две матрицы, одна исходная с числами, другая рабочая размер рабочей матрицы размер исходной +2 столба и 2строки. Для границ. Границы заполняются нулями. Все остальные числа рабочей матрицы заполняются 1(код свободности участка). Начальный пункт движения обозначается 3, конечный пункт движения 4. Вощем сделал я функцию с тремя параметрами (старая координата х, страрая координата у, направления движения) функция выполняет следующее: 1.первоначально из входных параметров определяется текущее местоположение. 2.Затем идет условие проверки, если в рабочей матрице на текущей позиции не стоит 3 или 0, т.е. это не граница и мы уже там не были то переходим к следующему пункту, иначе переходим к шагу 5 4.Если это не конечный пункт движения то вызываем эту же функцию 4 раза со следующими параметрами (первые два параметра - текущее местоположение), третий параметр - направление (поэтому и 4 раза). Если все же конечный, то подсчитвыем сумму всех элементов по которым прошли. и если она меньше суммы, которая была получена раньше, то переписываем её а также координаты 5.Так как главное условие позади, записываем в массив, в текущие координаты цифру 1. Тобиш мы здеся не были. ----- К сожалению при реализации на паскале, компилятор упорно не хотел компилить это, люди говорят что переполение стэка при вызове рекурсивной функции. Вощем какие есть идеи люди, и по поводу сего алгоритма и по поводу ошибки, и если есть другие идеи воплощения этой задачи. |
|||
|
||||
Fedor |
|
|||
![]() Днепрянин ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2090 Регистрация: 8.2.2003 Где: Великий Репутация: 2 Всего: 32 |
Мое решение:
-------------------- Мы - Днепряне. Мы всех сильней. |
|||
|
||||
Alexandr87 |
|
|||
![]() дыкий псых ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1459 Регистрация: 27.11.2004 Где: Алматы, Казахстан Репутация: 1 Всего: 39 |
Fedor
Большое спасибо |
|||
|
||||
[Last]Wizard |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 113 Регистрация: 20.7.2004 Где: Минск, Беларусь Репутация: нет Всего: 10 |
Это называется метод динамического программирования.
|
|||
|
||||
podval |
|
||||
![]() Где я? Кто я? ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3094 Регистрация: 25.3.2002 Где: СПб Репутация: 18 Всего: 62 |
В классике динамического программирования делается наоборот: сначала обратный ход, затем восстановление оптимального пути прямым проходом. |
||||
|
|||||
Alexandr87 |
|
|||
![]() дыкий псых ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1459 Регистрация: 27.11.2004 Где: Алматы, Казахстан Репутация: 1 Всего: 39 |
есть линки или инфа по методу динамического программирования
|
|||
|
||||
Fedor |
|
|||
![]() Днепрянин ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2090 Регистрация: 8.2.2003 Где: Великий Репутация: 2 Всего: 32 |
Нет. Это - похоже на динамическое программирование. В динамике мы решаем задачу n-той размерности если мы знаем как решать задачу размерности n-1. А тут не так немного. Мы ж можем и назад вернуться... Добавлено @ 19:20 Alexandr87 Вообще, если ты хочешь серьезно заниматься олимпиадным программированием, советую тебе не задавать вопросы на форумах, а самому рыться в литературе. Вот например классная (просто супер) книга - Кормен, Лейзерсон, Ривест - "Алгоритмы. Построение и анализ". Просто незаменимая книга. Но стоит порядка 25 букозоидов. -------------------- Мы - Днепряне. Мы всех сильней. |
|||
|
||||
Alexandr87 |
|
|||
![]() дыкий псых ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1459 Регистрация: 27.11.2004 Где: Алматы, Казахстан Репутация: 1 Всего: 39 |
2Fedor
Спасибо учту |
|||
|
||||
sonic |
|
|||
Unregistered |
Задача класическая.
Возми любой учебник по иследованию операций или математическому программированию. |
|||
|
||||
Б а Т о Н |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 30.1.2005 Где: Питер, м. Большев иков Репутация: нет Всего: 1 |
Однозначно необходимо применить известнейший алгоритм Дейкстры - поиск кратчайшего пути в весовом графе.
Твою структуру (таблицу с ячейками) можно полностью отождествить с направленным весовым графом. Дейкстра пишется в несколько строк и работает быстро. Описание алгоритма можешь легко найти в поисковиках. Данное решение является лучшим и самым быстрым. Искать ошибку в твоём огромном коде - дело гиблое. Так как реализация на самом деле гораздо проще, и лучше тебе написать заново. Надеюсь, мой ответ тебе помог. |
|||
|
||||
neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: нет Всего: 62 |
Я также решал эту задачу с немного модифицированным алгоритмом Дийкстры. Мне это нужно было для соединения блоков в блок-схеме.
-------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Алгоритмы" | |
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Алгоритмы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |