Форум программистов, компьютерный форум, киберфорум
Алгоритмы
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.75/16: Рейтинг темы: голосов - 16, средняя оценка - 4.75
 Аватар для Taras_Z
102 / 86 / 5
Регистрация: 27.10.2010
Сообщений: 534
Записей в блоге: 2

Найти выход из лабиринта

25.03.2014, 17:01. Показов 3671. Ответов 41
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как можно искать выход из лабиринта, который задается отрезками. То есть надо найти даже не выход, а можно ли добраться до выхода. Точка старта и финиша задаются координатами, также задаются координаты отрезков (стен) - начало и конец. Так как размеры могут быть достаточно велики, то рисовать попиксельно и искать путь не получится. Так как нужно ответить ли добраться до выхода, как это можно сделать?
Миниатюры
Найти выход из лабиринта  
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.03.2014, 17:01
Ответы с готовыми решениями:

Угадай, где выход! (Поиск листа бинарного дерева, содержащего выход из лабиринта)
Никогда раньше не решал задачи на деревья, но вот решил начать. Самая большая проблема в том, что я никак не могу понять примеры тестов...

Помогите с выбором алгоритма(найти все ходы на карте лабиринта)
Дана карта вида(задаётся любая в файле) S ***| нужно найти все всевозможные проходы **F | от старта(S) до финиша(F) и выдать * ...

Найти выход из лабиринта
Пожалуйста помогите решить. Перевод. Вопрос задачи: наити выход роботу из лабиринта. Робот проходит только через (.), а это (#)...

41
294 / 265 / 48
Регистрация: 09.04.2013
Сообщений: 1,038
25.03.2014, 17:50
Может разбить свободное пространство на треугольники, построить граф соседних треугольников (откуда куда можно пройти) и свести к поиску пути на графе.
1
 Аватар для Taras_Z
102 / 86 / 5
Регистрация: 27.10.2010
Сообщений: 534
Записей в блоге: 2
25.03.2014, 19:49  [ТС]
wingblack, а если так? Как тогда разбивать на треугольники?
Миниатюры
Найти выход из лабиринта  
0
294 / 265 / 48
Регистрация: 09.04.2013
Сообщений: 1,038
25.03.2014, 20:01
Точно так же. Если общая сторона двух треугольников является границей, то просто между ними нет пути.

Добавлено через 3 минуты
Была у меня еще идея прыгать по видимым точкам границы (провести отрезок из текущей точки к предполагаемой, если отрезок не пересекается с границей то прыгнуть на точку) плюс обход по периметру.
Но адекватной стратегии тут я не придумаю, кроме как полным перебором. На фоне это триангуляция выглядит более правильно.
0
 Аватар для OldFedor
7486 / 4150 / 474
Регистрация: 25.08.2012
Сообщений: 11,530
Записей в блоге: 11
25.03.2014, 20:06
Был фильм такой "Фараон".
Так там жрецы пользовались правилом левой руки.
Руку к стене и пошел, обойти можно все, но выход есть всегда.
Причем, если за стеной (Вашим треугольником) что-то и есть - по барабану идем и не обращаем внимания.
1
 Аватар для Taras_Z
102 / 86 / 5
Регистрация: 27.10.2010
Сообщений: 534
Записей в блоге: 2
25.03.2014, 20:09  [ТС]
wingblack, Как тогда делать триангуляцию в многоугольнике с самопересечениями? Тогда еще надо искать точки пересечения сторон или я неправильно понимаю?

Добавлено через 1 минуту
Я забыл уточнить, но в задачи может быть несколько выходов и тогда надо вывести все выходы через которые можно выйти. Хотя это несущественно меняет дело.
0
294 / 265 / 48
Регистрация: 09.04.2013
Сообщений: 1,038
25.03.2014, 20:43
Цитата Сообщение от OldFedor Посмотреть сообщение
Так там жрецы пользовались правилом левой руки.
Правило левой руки не везде работает.

Цитата Сообщение от Taras_Z Посмотреть сообщение
Как тогда делать триангуляцию в многоугольнике с самопересечениями?
Убрать самопересечения заменив 2 пересекающиеся отрезка на 4 с одной общей точкой.

Можно еще так сделать, менее быстро (наверное), но проще в реализации
-добавить старт в список обзора
-для каждой точки из списка обзора найти все видимые вершины и добавить в список обзора.
-текущую точку добавить в список "не проверять" и вычеркнуть из будущих проверок.

финишная точка считается достижимой если она попадала в список обзора, ну или по ней прошлись.
0
 Аватар для Taras_Z
102 / 86 / 5
Регистрация: 27.10.2010
Сообщений: 534
Записей в блоге: 2
25.03.2014, 20:47  [ТС]
Цитата Сообщение от wingblack Посмотреть сообщение
Можно еще так сделать, менее быстро (наверное), но проще в реализации
-добавить старт в список обзора
-для каждой точки из списка обзора найти все видимые вершины и добавить в список обзора.
-текущую точку добавить в список "не проверять" и вычеркнуть из будущих проверок.
финишная точка считается достижимой если она попадала в список обзора, ну или по ней прошлись.
Ну это поиск в ширину. Но какие точки будут называться видимыми?
0
294 / 265 / 48
Регистрация: 09.04.2013
Сообщений: 1,038
25.03.2014, 20:48
для упрощения работы все же даже в таком алгоритме следует исключить пересекающиеся отрезки границы
0
 Аватар для Taras_Z
102 / 86 / 5
Регистрация: 27.10.2010
Сообщений: 534
Записей в блоге: 2
25.03.2014, 20:49  [ТС]
Цитата Сообщение от wingblack Посмотреть сообщение
Убрать самопересечения заменив 2 пересекающиеся отрезка на 4 с одной общей точкой.
Тогда все равно будет несколько многоугольников, которые просто соприкасаются. Но как среди них делать триангуляцию я пока не очень понимаю.
0
294 / 265 / 48
Регистрация: 09.04.2013
Сообщений: 1,038
25.03.2014, 20:49
Цитата Сообщение от Taras_Z Посмотреть сообщение
Ну это поиск в ширину. Но какие точки будут называться видимыми?
точки назовем видимыми, если отрезок соединяющий исходную точку и исследуемую не пересекается с отрезком границы
0
 Аватар для Taras_Z
102 / 86 / 5
Регистрация: 27.10.2010
Сообщений: 534
Записей в блоге: 2
25.03.2014, 20:53  [ТС]
Цитата Сообщение от wingblack Посмотреть сообщение
точки назовем видимыми, если отрезок соединяющий исходную точку и исследуемую не пересекается с отрезком границы
Что есть "граница"?
0
294 / 265 / 48
Регистрация: 09.04.2013
Сообщений: 1,038
25.03.2014, 20:56
Цитата Сообщение от Taras_Z Посмотреть сообщение
Как можно искать выход из лабиринта, который задается отрезками.
вот эти отрезки и будут границей, они же "стены", возможно я не очень удачно обозвал
0
 Аватар для Taras_Z
102 / 86 / 5
Регистрация: 27.10.2010
Сообщений: 534
Записей в блоге: 2
25.03.2014, 20:59  [ТС]
Цитата Сообщение от wingblack Посмотреть сообщение
точки назовем видимыми, если отрезок соединяющий исходную точку и исследуемую не пересекается с отрезком границы
Тогда как их искать? Перебором?
0
294 / 265 / 48
Регистрация: 09.04.2013
Сообщений: 1,038
25.03.2014, 21:06
Цитата Сообщение от Taras_Z Посмотреть сообщение
Тогда как их искать? Перебором?
Угу.
Еще можно упростить если сначала все же удостоверится что "стены" взаимо не пересекаются, тогда можно в алгоритм добавить обход периметра, к которому данная точка принадлежит

Добавлено через 3 минуты
хотя тут уже проблема в выборе правильного периметра...
все же пока лучше без периметра
0
 Аватар для Taras_Z
102 / 86 / 5
Регистрация: 27.10.2010
Сообщений: 534
Записей в блоге: 2
25.03.2014, 21:15  [ТС]
Это действительно достаточно легкая реализация, но мне важнее время выполнения. Тогда остается триангуляция, но как ее сделать, если в нас несколько многоугольников?
0
294 / 265 / 48
Регистрация: 09.04.2013
Сообщений: 1,038
25.03.2014, 21:27
Цитата Сообщение от Taras_Z Посмотреть сообщение
Это действительно достаточно легкая реализация, но мне важнее время выполнения. Тогда остается триангуляция, но как ее сделать, если в нас несколько многоугольников?
Посмотреть алгоритмы по триангуляции по точкам, и дополнить чтобы стены всегда были сторонами треугольников
1
 Аватар для Taras_Z
102 / 86 / 5
Регистрация: 27.10.2010
Сообщений: 534
Записей в блоге: 2
26.03.2014, 13:36  [ТС]
wingblack, Спасибо!
Когда сделаю - отпишу.

Добавлено через 16 часов 6 минут
Цитата Сообщение от wingblack Посмотреть сообщение
Можно еще так сделать, менее быстро (наверное), но проще в реализации
-добавить старт в список обзора
-для каждой точки из списка обзора найти все видимые вершины и добавить в список обзора.
-текущую точку добавить в список "не проверять" и вычеркнуть из будущих проверок.
Попробовал сначала сделать так, но возникла одна проблема:
Со старта мы добавим синюю точку в очередь, так как она является видимой. Когда дойдет очередь до ее рассмотрения, с этой точки, финиш будет видим, но мы не можем дойти к старту до финиша.
0
1969 / 825 / 115
Регистрация: 01.10.2012
Сообщений: 4,885
Записей в блоге: 2
26.03.2014, 13:58
С триангуляцией там долго пыль глотать. Чем не устраивает предложение OldFedor? Его только чуть оформить, напр

- соединяем текущую точку с конечной. Если не пересекаем ни один из отрезков - готово
- иначе из текущей находим любую в которую можно прийти и дальше просто идем-идем-идем проходя каждый отрезок 1 раз
- если какие-то доп треугольники/перекрытия, то их надо заранее учесть введя новые точки и разбив отрезки
1
294 / 265 / 48
Регистрация: 09.04.2013
Сообщений: 1,038
26.03.2014, 16:12
Цитата Сообщение от Igor3D Посмотреть сообщение
Чем не устраивает предложение OldFedor?
Метод правой руки не является универсальным. Про это много и везде говорили уже.
Вот вам лабиринт, пробуйте с помощью него пройти его.
Миниатюры
Найти выход из лабиринта  
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.03.2014, 16:12
Помогаю со студенческими работами здесь

Найти выход из лабиринта, прочертив весь путь
Здравствуйте.Идея такая.Есть dmp рисунок.на нем нарисован лабиринт(ну как в журналах детские странички) как програмно просчитывая пиксели...

Составить программу, которая позволяет игроку найти выход из лабиринта
Составить программу, которая позволяет игроку найти выход из лабиринта. Условия: 1) пусть прямоугольное клеточное поле (размером NxN,...

Выход из лабиринта
Дан лабиринт M: array of boolean; (true - стена false - свободно) Начало в верхнем левом угле Конец в нижнем правом угле ...

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

Выход из лабиринта
Помогите допилить.Нужен алгоритм нахождения выхода и лабиринта.За ранее спасибо! Вот сам лабиринт: uses GraphABC; const ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Семь 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. На борту пять. . .
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера 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. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru