0 / 0 / 0
Регистрация: 06.06.2020
Сообщений: 1
|
|
1 | |
Нахождение пути в лабиринте поиском сначала в ширину (BFS)06.06.2020, 09:53. Показов 2678. Ответов 0
Метки нет (Все метки)
Прошу помощи, может даже кто-то на форуме занимался таким
Нахождение пути в лабиринте поиском сначала в ширину (BFS). Лабиринт представляет прямоугольное поле из клеток, по которым можно перемещаться, выполняя за один ход переход в соседнюю клетку (расположенную сверху, снизу, слева или справа от текущей), не выходя за пределы лабиринта. Нельзя переместиться в "непроходимую" клетку. В исходных данных лабиринт представлен картой, состоящей из символов, на карте "непроходимые" клетки помечены символом '*', а свободные символом '.’. Входом в лабиринт является верхняя левая клетка, а выходом - правая нижняя клетка. Эти клетки "свободны". Нужно определить минимальное количество ходов, необходимых для достижения выхода и путь, которым достигается это решение (или один из возможных путей, если решений несколько). ПЕРВЫЙ шаг (подготовка). Прочитать данные : Ввести из потока stdin значения N, M - количество строк и столбцов карты лабиринта. Ввести построчно всю карту лабиринта в массив char l[N][M]. Построить числовой вариант карты int L[N][M], в котором изначально в свободные клетки записывается число INT_MAX (максимально возможное целое) Для использования этой константы подключите заголовочный файл «limits.h». В "непроходимые клетки" запишем -1. ВТОРОЙ шаг (инициализация) Создадим две очереди Q1 и Q2. В клетку с координатами [0][0] числового массива запишем 0 - число шагов, необходимых для достижения этой клетки. В переменную Nc запишем число 1. В очередь Q1 поместим клетку [0][0]. ТРЕТИЙ шаг (итерация). Если очередь Q1 пуста, идем к пятому шагу. Если очередь Q1 не пуста, для каждого элемента в ней просмотреть соседние клетки, и если в них можно переместиться, то запишем в них число Nc, при условии, что находящееся там число больше Nс. Клетку, в которую мы произвели запись, занесем в очередь Q2. Когда все элементы очереди Q1 будут рассмотрены, перейдем к следующему шагу. ЧЕТВЕРТЫЙ шаг. Меняем очереди Q1 и Q2 местами. Теперь Q2 пуста, в Q1 - список клеток для обработки на новом шаге итерации. ПЯТЫЙ шаг (вывод результата). Если в клетке выхода осталось значение INT_MAX, то лабиринт не проходим. Иначе в нем находится ответ. Восстановить путь обратным движением по клеткам с убывающими значениями, вплоть до значения 0 (входная клетка). Выводим на консоль решение и путь ---------------------------------------------- Пример входной информации в файле Labirint.txt Максимальные значения M и N 2000, минимальные 2. В исходных данных в конце строки могут стоять либо один символ '\n’ или два '\r' и '\n'. Программа должна корректно их обрабатывать
0
|
06.06.2020, 09:53 | |
Ответы с готовыми решениями:
0
Нахождение кратчайшего пути до цели в лабиринте Нахождение пути в лабиринте с использованием генетического алгоритма Нахождение пути из одного угла в противоположный в лабиринте размерами MxN Графы, нахождение наименьшего пути между вершинами обходом в ширину |
06.06.2020, 09:53 | |
06.06.2020, 09:53 | |
Помогаю со студенческими работами здесь
1
Алгоритм BFS // поиск в ширину Обход графа в ширину - Breadth First Search (BFS) Отсутствие пути при решении BFS Дерево директорий глубины d и ширины b, способом сначала-в-глубину/сначала-в-ширину Поиск пути в лабиринте Поиск пути в лабиринте Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |