Вопрос

Я пытаюсь использовать тип Boost adjacency_list, и у меня возникают проблемы с пониманием Документация.

Допустим, я определяю класс с именем State и создаю по одному экземпляру для каждого штата в США:

class State { ... };
State california, oregon, nevada, arizona, hawaii, ...

Я хочу ввести их в boost::adjacency_list вершины - это состояния, а ребра - границы.Для состояний, которые я перечислил выше, я думаю, что на графике будут эти данные:

california : oregon, nevada, arizona
hawaii :
oregon : california, nevada
nevada : oregon, california, arizona
arizona : california, nevada

Я понимаю, как помещать целые числа в график, и я рассматривал возможность просто создать массив состояний и вставить их индекс массива в график, но, похоже, я должен быть в состоянии просто сказать:

add_edge(california, oregon, graph);

но, конечно, это не работает.Пожалуйста, помогите!

Редактировать:
Вот пример почти именно того, что мне нужно.

Это было полезно?

Решение

Читая boost::adjacency_list, кажется, что вы должны использовать свойства для вершин, а не что-то вроде класса:

struct VertexProperties {
    std::string stateName;
};

typedef adjacency_list<listS, listS, bidirectionalS, VertexProperties> Graph;
Graph adjacentStates(50);

property_map<Graph, std::string VertexProperties::*>::type
    stateName = get(&VertexProperties::stateName, adjacentStates);

add_edge(vertex("california", adjacentStates), vertex("oregon", adjacentStates), adjacentStates);

(Плохо) адаптированный из пример в boost.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top