Boost adjacency_list ayuda necesaria
-
03-07-2019 - |
Pregunta
Estoy tratando de usar el tipo de lista de adyacencia de Boost y tengo problemas para entender el documentación .
Diga que defino una clase llamada State y que instancia una instancia para cada estado en los Estados Unidos:
class State { ... };
State california, oregon, nevada, arizona, hawaii, ...
Quiero ingresar estos en un boost :: adjacency_list los vértices son estados y los bordes son bordes. Para los estados que enumeré anteriormente, creo que la gráfica tendría estos datos:
california : oregon, nevada, arizona
hawaii :
oregon : california, nevada
nevada : oregon, california, arizona
arizona : california, nevada
Comprendo cómo colocar las ints en el gráfico y consideré simplemente hacer una serie de estados e insertar su índice de matriz en el gráfico, pero parece que debería poder decir simplemente:
add_edge(california, oregon, graph);
pero por supuesto eso no funciona. Por favor ayuda!
Editar:
Aquí hay un ejemplo de casi exactamente lo que necesita.
Solución
Leyendo sobre boost :: adjacency_list, parece que debes usar las propiedades de los vértices en lugar de algo como una clase:
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);
(Mal) adaptado de un ejemplo en boost .