Pregunta

Estoy tratando de iterar a través de los bordes de un gráfico y generar sus pesos de borde. Aunque estoy confundido. Sé cómo generar los "bordes", pero esto es en realidad solo un (vértice, vértice) que define el borde. Entonces, ¿indexo *EdgePair.first en el borde de peso borde para obtener el peso del borde a partir de vértice *EdgePair.first? Esto no compila: "Sin coincidencia para el operador <<".

#include <iostream>
#include <boost/graph/graph_traits.hpp>
#include <boost/graph/adjacency_list.hpp>

typedef boost::property<boost::edge_weight_t, double> EdgeWeightProperty;
typedef boost::adjacency_list<boost::vecS, boost::vecS, boost::undirectedS, EdgeWeightProperty> Graph;

int main(int,char*[])
{
  // Create a graph object
  Graph g(2);

  EdgeWeightProperty e = 5;
  add_edge(0, 1, e, g);

  boost::property_map<Graph, boost::edge_weight_t>::type EdgeWeightMap = get(boost::edge_weight_t(), g);

  typedef boost::graph_traits<Graph>::edge_iterator edge_iter;
  std::pair<edge_iter, edge_iter> edgePair;
  for(edgePair = edges(g); edgePair.first != edgePair.second; ++edgePair.first)
  {
      std::cout << EdgeWeightMap[*edgePair.first] << " ";
  }

  return 0;
}

¿Alguna idea?

Gracias David

¿Fue útil?

Solución

En este código, EdgeWeightProperty se declara como una propiedad de vértice en lugar de una propiedad de borde, por lo que no tiene sentido insertar bordes con esa propiedad. Intenta agregar boost::no_property antes de EdgeWeightProperty en tus adjacency_list typedef. Además, es posible que desee usar get(EdgeWeightMap, *edgePair.first) más bien que operator[] Porque eso funcionará con más tipos de mapa de propiedades.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top