|
Boost Users : |
Subject: [Boost-users] Problem calling bellman_ford_shortest_paths
From: Tim Keitt (tkeitt_at_[hidden])
Date: 2008-10-27 17:06:10
I'm prototyping some code that exposes an edge_list iterator interface
to a database cursor. I've defined a forward_iterator using
iterator_facade and can use that to create an edge_list graph. I'm
running into a problem however calling bellman_ford_shortest_paths on
the graph. I get
boost_bellman_ford.cpp:18: error: no matching function for call to
'bellman_ford_shortest_paths(Graph&, position_t&, edge_weight_map,
long long int*, double*)'
The code leading up to that looks like:
position_t N = getNumVertices();
edge_iterator iter;
DEBUG_MESSAGE("Contructed iterator");
Graph g(iter, iter.end());
DEBUG_MESSAGE("Constructed edge list graph");
std::vector<double> distance(N, std::numeric_limits<double>::max());
distance[0] = 0.0;
std::vector<position_t> parent(N);
for ( position_t i = 0; i < N; ++i ) parent[i] = i;
boost::bellman_ford_shortest_paths(g, N, edge_weight_map(),
&parent[0], &distance[0]);
The edge iterator is linked to the database cursor on construction.
The problem I am guessing is in how I define the edge_weight_map. It looks like
struct edge_weight_map
{
typedef cost_t value_type;
typedef cost_t * reference;
typedef edge_t key_type;
typedef boost::readable_property_map_tag category;
};
boost::property_traits<edge_weight_map>::value_type
get(edge_weight_map map,
boost::property_traits<edge_weight_map>::key_type key) { return
key.cost; }
It makes no sense for me to repeatedly query the database for the edge
weight, so I attach it as a third field in the edge_descriptor. The
get function merely returns the third component of the edge struct.
I'm sort of assuming the way I am defining the edge_weight_map is the
problem. Any insights?
Also, I noticed the simply constructing the edge_list graph traverses
the entire iterator range. Is there some copying going on? Can I
override this behavior?
THK
-- Timothy H. Keitt http://www.keittlab.org/
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net