Проблема прокладки пути/дороги

сегодня мы получили задание завершить в лаборатории (через два часа). Вопрос был таков:--1-->

  • вам дается m * n матрица.
  • матрица имеет жилые залы " h "и входы главного здания "b".
  • расположение этих залов " h "и входов" b " известно (в терминах (X,y) координат).
  • вам нужно проложить такие пути, чтобы каждый жилой зал имел хотя бы один способ добраться до одного из входов "b".
  • там можно больше б таких отключены пути.
  • длина пути должна быть минимальной.
  • вы можете двигаться только вверх, вниз, влево или вправо.
  • решение не должно быть попыткой грубой силой.

задание выполнено. Но я все еще думаю, как это можно решить. Существует ли стандартный термин для таких проблем? Что я должен прочитать?

люди используют такие алгоритмы для прокладки дорог в городах?

5 ответов


вот решение, которое я придумал. Он не генерирует отключенные пути "b". Он генерирует один путь, который проходит через все жилые залы и входы.

  • вычислить расстояние между каждой парой узлов (разность координат X + разность координат Y). Теперь у вас есть полный график.
  • найти MST для этого полного графика
  • каждый наклонный край MST (те, которые не являются вертикальными или горизонтальными) можно разделить на два части-горизонтальная и вертикальная.
  • каждое разделение может быть сделано двумя способами-либо по горизонтали сначала следуют вертикальные или наоборот.
  • пройдите через каждую такую перестановку и вычислите путь с наименьшей длиной. Вот ответ.

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

на одном конце шкалы у вас есть системы стратегического моделирования, которые используют аналогичный (в широком смысле) подход. Их можно рассматривать как гравитационную модель - она будет использовать оценки генерации трафика и спроса, чтобы делать прогнозы высокого уровня транспортных потоков между, например, городами и городами или промышленными районами, чтобы селитебном, etc. Это в основном полезно для изучения макроэффектов крупных запланированных изменений, изменений в распределении населения или зонах землепользования.. что-то в этом роде.

на другом конце у вас есть имитационные модели конкретных районов города, города, развязки и т. д. Это числовые модели, которые рассматривают каждый автомобиль как автономный агент с такими факторами, как агрессия, знание дороги и т. д. Это очень подход стиля грубой силы, но это единственный способ предоставьте полезную статистику о фактическом поведении трафика в сложной сети с такими функциями, как светофоры, автобусы и т. д. Например, модельер трафика может подключить его к фактическим данным управления трафиком, запустить модель в течение определенного периода для конкретных проектных решений и настроить ее на выполнение 6 или 7 раз. Полученные данные дают вам очень хорошую оценку эффективности конкретного решения против другого (или статус-кво).

надеюсь, это дает некоторые полезные контекст.


есть аспект описания проблемы, который мне непонятен:

  • когда вы говорите: "вам нужно проложить путь", означает ли это "только один непрерывный путь?- Или может быть несколько разрозненных путей? (например, путь от зала H1 до входа в здание B1 и отдельный путь от зала H2 до входа в здание B2)

но как бы вы ни ответили на мой вопрос, это чрезвычайно сложная проблема: это NP-трудно, поскольку она включает в себя прямолинейное дерево Штайнера проблема как особый случай (когда есть только один главный вход в здание).

поэтому никто не знает, как эффективно решить его в общем случае!


Я думаю, что проблема проще, а не дерево Штайнера или даже не минимальное связующее дерево .

  1. представить матрицу M в виде графа G с V ={Mij / i

  2. возьмите набор B входов, набор H залов

  3. H '= H/ B, B ' = B /H (отметьте залы, которые являются входами, они достигаются на глубине 0, удалите все эти входы как те есть залы)

  4. сделайте широтно-первый обход. На каждой глубине отметьте залы, которые могут быть достигнуты от B, пока все залы не будут отмечены. Выберите соответствующие пути.


Это проблема поиска. Вы должны были сделать это за 2 часа, верно? Я бы DFS и чернослив. Вы могли бы использовать эвристика чтобы быстрее добраться до лучших решений. Но имейте в виду, что эвристика не может гарантировать оптимальные решения, поэтому вам придется попробовать все возможности. Кажется, NP-жесткий.