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

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

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

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

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

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

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

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

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

Код
3 4
#2B1
49#2
A121
Пример выходных данных
Код
7
P.S. Добрые люди, помогите с алгоритмом
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.09.2012, 21:52
Ответы с готовыми решениями:

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

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

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

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

8
1405 / 647 / 135
Регистрация: 11.08.2011
Сообщений: 2,299
Записей в блоге: 2
11.09.2012, 23:40 2
Цитата Сообщение от v0dka Посмотреть сообщение
Добрые люди, помогите с алгоритмом
Поиск в ширину в графе.
0
0 / 0 / 0
Регистрация: 02.09.2012
Сообщений: 18
11.09.2012, 23:44  [ТС] 3
Dani, Кажется я начинаю понимать о чём ты), если можно, то хотелось бы подробнее
0
1405 / 647 / 135
Регистрация: 11.08.2011
Сообщений: 2,299
Записей в блоге: 2
11.09.2012, 23:54 4
v0dka, смотри: идем из начальной вершины, добавляем в очередь все вершины, которые являются соседними с текущей и т.д., пока не дойдем до конца. И если для вершины i есть соседняя v, то длина пути до нее - длина до i + время. И в последней ячейке и будет ответ. Не добавлять вершину в очередь, если она уже посещена, или это стена.
1
0 / 0 / 0
Регистрация: 02.09.2012
Сообщений: 18
12.09.2012, 00:06  [ТС] 5
Dani, спасибо... ты мне ещё шире глаза открыл завтра попробую решить... если будут вопросы или ничего не получится, в личку напишу или сюда)
0
Эксперт С++
4727 / 2548 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
13.09.2012, 06:14 6
Цитата Сообщение от Dani Посмотреть сообщение
v0dka, смотри: идем из начальной вершины, добавляем в очередь все вершины, которые являются соседними с текущей и т.д., пока не дойдем до конца. И если для вершины i есть соседняя v, то длина пути до нее - длина до i + время. И в последней ячейке и будет ответ. Не добавлять вершину в очередь, если она уже посещена, или это стена.
не совсем правильный алгоритм. Вот тест:
4 3
##B
111
1#9
11A
Для ячейки [2][3] будет ситуация, что она уже посещена (имеет значение 10), но ее все-таки нужно заносить в очередь снова.
1
1405 / 647 / 135
Регистрация: 11.08.2011
Сообщений: 2,299
Записей в блоге: 2
13.09.2012, 16:55 7
valeriikozlov, и я так понимаю, ей не уменьшать расстояние во второй раз?
0
Эксперт С++
4727 / 2548 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
13.09.2012, 19:23 8
Цитата Сообщение от Dani Посмотреть сообщение
valeriikozlov, и я так понимаю, ей не уменьшать расстояние во второй раз?
наоборот, во второй раз ей нужно уменьшать расстояние, иначе не вычислим:
Цитата Сообщение от v0dka Посмотреть сообщение
Одно целое число - наименьшее время, необходимое для того, чтобы добраться из клетки A в клетку B.
На самом деле, для одной ячейки, используя алгоритм из поста №4, значение может изменяться (уменьшаться) несколько раз (даже больше 3-х раз). Поэтому нужно или использовать алгоритм из 4 поста (но с условием добавлять уже пройденные вершины, если для них уменьшилось значение, а значит размер очереди намного больше N*M), или еще один алгоритм (но это в другой раз, если описанный алгоритм не пройдет по времени).
1
0 / 0 / 0
Регистрация: 02.09.2012
Сообщений: 18
14.09.2012, 00:32  [ТС] 9
Был в последнее время занят сильно, не успел порешать))) скоро попробую и если что отпишу)
0
14.09.2012, 00:32
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.09.2012, 00:32
Помогаю со студенческими работами здесь

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

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

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

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

Как сделать функцию для нахождения самого длинного и короткого пути между 2 вершинами?
Еще один вопрос по Хаскелю. Есть тип type Graph = ] Как сделать функцию для нахождения самого...

Написать программу для нахождения кратчайшего расстояния между двумя станциями метро
Написать программу для нахождения кратчайшего расстояния между двумя станциями метро Помогите...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru