Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.94/18: Рейтинг темы: голосов - 18, средняя оценка - 4.94
 Аватар для v0dka
0 / 0 / 0
Регистрация: 02.09.2012
Сообщений: 18

Составить программу нахождения самого кратчайшего пути

11.09.2012, 21:52. Показов 3750. Ответов 8
Метки нет (Все метки)

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

Задача
По заданной карте лабиринта (размера N x M) найдите самый кратчайший путь из точки A в точку B. Учтите, что каждая клетка имеет метку, которая соответствует времени, которое нужно затратить, чтобы пройти по ней. Также есть непроходимые клетки. За пределы лабиринта выходить нельзя. Из каждой клетки, можно пройти в соседние по горизонтали или вертикали (если они не являются непроходимыми). То есть, возможно перейти в соседнюю клетку, если она имеет общее ребро с текущей.

Входные данные
В первой строке 2 целых числа N и M через пробел (3<=N,M<=100). В следующих N cтроках по M символов без пробелов:
1-9 - время, которое нужно затратить, чтобы пройти по клетке (проходимая клетка);
# - стена (непроходимая клетка);
A - клетка старта (всегда присутствует в схеме);
B - клетка выхода из лабиринта (может быть где угодно в схеме лабиринта).
A и В всегда присутствуют в схеме лабиринта, и всегда в единственном экземпляре.

Выходные данные

Одно целое число - наименьшее время, необходимое для того, чтобы добраться из клетки A в клетку B.

Пример входных данных

Code
1
2
3
4
3 4
#2B1
49#2
A121
Пример выходных данных
Code
1
7
P.S. Добрые люди, помогите с алгоритмом
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.09.2012, 21:52
Ответы с готовыми решениями:

Составить программу для нахождения кратчайшего пути парохода
Пароход должен пройти из пункта М в пункт Н,обойдя препятствие,имеющее вид отрезка АВ.Составить программу для нахождения кратчайшего пути...

Составить программу нахождения самого большого по модулю элемента массива
Дано масив А(1....m, 1....n) и натуральное число n. Составить программу нахождения самого большого по модулю элемента масива,а также...

Составьте программу кратчайшего пути парохода
пароход должен пройти из пункта м в пункт n обойдя препятствие,имеющее вид отрезка AB. составьте программу кратчайшего пути...

8
1406 / 648 / 135
Регистрация: 11.08.2011
Сообщений: 2,299
Записей в блоге: 2
11.09.2012, 23:40
Цитата Сообщение от v0dka Посмотреть сообщение
Добрые люди, помогите с алгоритмом
Поиск в ширину в графе.
0
 Аватар для v0dka
0 / 0 / 0
Регистрация: 02.09.2012
Сообщений: 18
11.09.2012, 23:44  [ТС]
Dani, Кажется я начинаю понимать о чём ты), если можно, то хотелось бы подробнее
0
1406 / 648 / 135
Регистрация: 11.08.2011
Сообщений: 2,299
Записей в блоге: 2
11.09.2012, 23:54
v0dka, смотри: идем из начальной вершины, добавляем в очередь все вершины, которые являются соседними с текущей и т.д., пока не дойдем до конца. И если для вершины i есть соседняя v, то длина пути до нее - длина до i + время. И в последней ячейке и будет ответ. Не добавлять вершину в очередь, если она уже посещена, или это стена.
1
 Аватар для v0dka
0 / 0 / 0
Регистрация: 02.09.2012
Сообщений: 18
12.09.2012, 00:06  [ТС]
Dani, спасибо... ты мне ещё шире глаза открыл завтра попробую решить... если будут вопросы или ничего не получится, в личку напишу или сюда)
0
Эксперт С++
 Аватар для valeriikozlov
4728 / 2549 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
13.09.2012, 06:14
Цитата Сообщение от Dani Посмотреть сообщение
v0dka, смотри: идем из начальной вершины, добавляем в очередь все вершины, которые являются соседними с текущей и т.д., пока не дойдем до конца. И если для вершины i есть соседняя v, то длина пути до нее - длина до i + время. И в последней ячейке и будет ответ. Не добавлять вершину в очередь, если она уже посещена, или это стена.
не совсем правильный алгоритм. Вот тест:
4 3
##B
111
1#9
11A
Для ячейки [2][3] будет ситуация, что она уже посещена (имеет значение 10), но ее все-таки нужно заносить в очередь снова.
1
1406 / 648 / 135
Регистрация: 11.08.2011
Сообщений: 2,299
Записей в блоге: 2
13.09.2012, 16:55
valeriikozlov, и я так понимаю, ей не уменьшать расстояние во второй раз?
0
Эксперт С++
 Аватар для valeriikozlov
4728 / 2549 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
13.09.2012, 19:23
Цитата Сообщение от Dani Посмотреть сообщение
valeriikozlov, и я так понимаю, ей не уменьшать расстояние во второй раз?
наоборот, во второй раз ей нужно уменьшать расстояние, иначе не вычислим:
Цитата Сообщение от v0dka Посмотреть сообщение
Одно целое число - наименьшее время, необходимое для того, чтобы добраться из клетки A в клетку B.
На самом деле, для одной ячейки, используя алгоритм из поста №4, значение может изменяться (уменьшаться) несколько раз (даже больше 3-х раз). Поэтому нужно или использовать алгоритм из 4 поста (но с условием добавлять уже пройденные вершины, если для них уменьшилось значение, а значит размер очереди намного больше N*M), или еще один алгоритм (но это в другой раз, если описанный алгоритм не пройдет по времени).
1
 Аватар для v0dka
0 / 0 / 0
Регистрация: 02.09.2012
Сообщений: 18
14.09.2012, 00:32  [ТС]
Был в последнее время занят сильно, не успел порешать))) скоро попробую и если что отпишу)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.09.2012, 00:32
Помогаю со студенческими работами здесь

Написать программу для нахождения кратчайшего пути между заданными вершинами графа
visual studio windows forms нужна программа,которая будет вычислять кратчайший путь от вершины a до вершины b в графе, граф задается...

Задача нахождения кратчайшего пути
Никак не могу понять почему в таких типах задач у меня ошибка. Помогите найти ошибку, и если сможете объясните её. Условие ...

Распаралелить алгоритм нахождения кратчайшего пути
Здравствуйте. Помогите, пожалуйста, распаралелить алгоритм Дейкстры. Вообще идей нету как это можно сделать. public class...

Граф и реализация алгоритмов нахождения кратчайшего пути
Пожалуста,помогите!Как создать граф в для реализации на нем разных алгоримов нахождения кратчайшего пути? Задано количество вершин,...

Составить программу для нахождения времени пути t1 поезда, если есть встречный ветер
Поезд едет из пункта А в пункт Б со средней скоростью V. Составить программу для нахождения времени пути t1, если есть встречный ветер,...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
Программный отбор значений справочника
Maks 21.03.2026
Установка программного отбора значений справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru