Алгоритм нахождения ближайшего способа добраться из точки А в точку Б в транзитной сети? - PullRequest
0 голосов
/ 24 февраля 2012

Хорошо, я пытаюсь написать базовую программу, которая может помочь пользователю найти ближайший способ передвижения из точки А в точку Б в сети метро. В настоящее время я пишу это на Java, и у меня есть три класса: класс станции, класс маршрута и класс управления. Идея состоит в том, что объект Route хранит ограниченное количество объектов Station в списке массивов, который фактически имитирует один маршрут метро, ​​который содержит точное количество станций. Кроме того, объект Station, который может хранить несколько объектов Route, а также транзитную станцию ​​метро, ​​расположенную на нескольких маршрутах одновременно. Часть, над которой я работаю, состоит в том, чтобы позволить пользователю войти в его станцию ​​отправления и станцию ​​назначения, после чего программа распечатает список станций, которые им нужно было передать (должно быть как можно меньше), чтобы прибыть на свою станцию. место назначения. В настоящее время я весьма поражен поиском хорошего алгоритма для выполнения этой части программы, и я не могу понять, как написать код, который может выполнить эту задачу в сложной сети. Так что если у кого-то есть идеи, пожалуйста, объясните мне это. Спасибо.

1 Ответ

3 голосов
/ 24 февраля 2012

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

Оба алгоритма очень легко реализовать, учитывая правильные структуры данных (я думаю, что у вас может не быть необходимого класса маршрутов, почему бы вам просто не иметь каждый объект Station, содержащий список его прямых соседей?Это более точно следует общей структуре данных графа).Вы можете создать предварительно вычисленную таблицу поиска (хотя для многих станций она будет большой) для каждой станции, которая сообщает вам от этой станции, с учетом желаемой станции назначения, на какую соседнюю станцию ​​перейти к следующей.По сути, это создаст таблиц маршрутизации для каждой станции.

...