2015-02-03 1 views
-1

У меня есть проект с большим графом, заполненным, как это:Wrap моего собственный графика с бустом :: графиком и вычислите dijkstra_shortest_paths

struct EdgeItem{ 
    int mPid1; 
    int mPid2; 
    double weight; 
}; 
struct StationItem{ 
    int mPid; 
    QString mName; 
}; 
QMap<int, StationItem> StationsMap; 
QList<EdgeItem> mEdgesList; 
QVector<EdgeItem*> GetEdgesByPid(int Pid); 
// and some other service methods 

станции карты проиндексирована Pid. Границы графа как MapLayerEdgeItem имеют вес. Не важно не копировать данные графа и использовать существующие структуры. Мне нужно запустить и рассчитать dijkstra_shortest_paths на нем. Пожалуйста, предложите, с чего мне нужно начать.

+0

См. [Документы] (http://www.boost.org/doc/libs/1_57_0/libs/graph/doc/dijkstra_shortest_paths.html) и [пример] (http://www.boost.org/ doc/libs/1_57_0/libs/graph/example/dijkstra-example.cpp) – pbible

+0

«Когда вы спрашиваете программиста Nix для туалетной бумаги, он дает вам топор и показывает ближайший лес». Примеры, предоставляемые с помощью графа boost docs, известны как довольно простые и не включают в себя все ситуации. Вы связали образец, используя простые массивы. Мне нужно использовать QMap и QList без копирования данных в другой формат. Спасибо. –

+0

Вы спросили, пожалуйста, подскажите, что мне нужно для начала. Я думаю, что документы и примеры - отличное место. Если вы хотите использовать встроенные алгоритмы, вам нужно использовать интерфейс ускоренного графа. Дейкстра не так сложно реализовать. если бы я был вами, я бы бросил свой собственный. В противном случае вам нужно адаптировать свои структуры к интерфейсу. – pbible

ответ

2

Для этого вам необходимо перенести свой график в интерфейс библиотеки ускорителей (BGL). Как упоминалось в комментарии, посмотрите на этот question, который связывает boost how to convert existing graphs.

Кажется, вы действительно задаете два вопроса. Как настроить отображение графика в BGL? и как мне выполнить (и извлечь смысл из) Dijsktra в boost?

Оба не являются тривиальными, если вы не используете BGL. Почему бы не попытаться адаптировать адаптер, а затем задать более конкретный вопрос, когда вы столкнулись с проблемой?

Если все, что вам нужно, это Djikstra, я бы предложил использовать вашу собственную реализацию. Если вы считаете, что будете использовать другую функциональность BGL, то адаптер - это путь.

 Смежные вопросы

  • Нет связанных вопросов^_^