Я проводил довольно много дней, работая с библиотекой графов ускорения. Насколько я понимаю, при рассмотрении VertexList и хранения EdgeList:Boost graph list или vec
ЗВТА:
- обладает индексом, поэтому может быть доступ с ним
- при удалении вершины, итератор аннулируется
СПИСКИ:
- нет индекса
- не аннулирует итератор
Это немного коротко, но это касается моей проблемы. Мне нужен номер индекса, и я хочу иметь возможность легко удалить вершины позже.
У меня есть алгоритм работы с этой структурой графа:
typedef boost::adjacency_list<
boost::vecS, boost::vecS, boost::undirectedS,
topologicalmap::Intersection_Graph ,
boost::edge_weight_t,
boost::no_property > Graph_boost;
У меня есть пользовательские структуры Intersection_Graph
для моих вершин, которые мне нужно использовать. Здесь я использую vecS.
Я хочу использовать listS вместо того, чтобы удалять вершины. Кроме того, я хочу использовать его позже с алгоритмом Дейкстры.
Я понимаю, что мне нужно иметь boost::vertex_index_t
в моем списке, но я действительно запутался в том, как это сделать и сохранить свою собственную структуру одновременно.
Я пытался что-то вдоль этих линий:
typedef boost::adjacency_list<
boost::listS, boost::listS, boost::undirectedS,
boost::property<boost::vertex_index_t, topologicalmap::Intersection_Graph>,
boost::edge_weight_t,
boost::no_property > Graph_boost;
Но я даже не могу получить доступ к моей пользовательской-структуре больше. Кроме того, доступ к индексу не работает.
Мне действительно нужна возможность доступа к индексу, так как алгоритм мой график будет зависеть от возврата индекса родительского узла. Я чувствую, что мог бы избежать использования вершин вместо индексов, но это означало бы серьезную переписку кода, и я хочу знать, могу ли я избежать этого.
Итак, мой вопрос: есть ли способ, чтобы listS вел себя как vecS, сохраняя при этом преимущества listS?
Пожалуйста, несите меня, если это звучит глупо. На данный момент я довольно запутан, поэтому я мог бы сказать что-то глупое. Если вам нужна дополнительная информация, просто спросите.
что не так с использованием vertex_descriptor, как предполагалось (это стабильный «индекс») вместо целых индексов? – sehe
Я использую этот график в сочетании с предыдущим алгоритмом, который возвращает число узлов как целое число индексов. Использование vertex_descriptor означает, что мне нужно переписать много предыдущего кода с тех пор (скажите мне, если я ошибаюсь). Я не думаю, что могу сделать что-то вроде _graph (0) с listS. Плюс мне это понадобится для Дикшстры, нет? см. http://stackoverflow.com/questions/7156880/dijkstra-shortest-path-with-vertexlist-lists-in-boost-graph. Или я все смешиваю: S? – Malcolm
Вам нужно это для Dijkstra, но, как уже сказано в моем ответе, вы можете передать его отдельно. – sehe