$include_dir="/home/hyper-archives/boost-users/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-users] [BGL] Having a cost function as weight map
From: Maxime van Noppen (maxime_at_[hidden])
Date: 2009-12-18 11:01:20
Hi,
I can't find how to do this pretty basic thing : having a function
instead of a field to compute the cost of edges for various path finding
algorithms. I couldn't find the answer in the documentation and Google
was of no help. Did I miss something obvious ?
Example :
-------------------
#include <boost/graph/dijkstra_shortest_paths.hpp>
#include <boost/graph/graph_traits.hpp>
#include <boost/graph/adjacency_list.hpp>
struct my_edge
{
  double cost() const { return cost_ * 2; }
  double cost_;
};
struct my_node
{
};
int main()
{
  typedef boost::adjacency_list< boost::vecS, boost::vecS,
                                 boost::directedS, my_node, my_edge >
          graph_t;
  typedef boost::graph_traits<graph_t>::vertex_descriptor vertex_t;
  graph_t graph;
  vertex_t v /*=  ... */;
  using boost::weight_map;
  // Works :
  boost::dijkstra_shortest_paths(graph, v,
      weight_map(boost::get(&my_edge::cost_, graph)));
  // Doesn't compile :
  //boost::dijkstra_shortest_paths(graph, v,
  //    weight_map(boost::get(&my_edge::cost, graph)));
}
-------------------
Thanks !
-- Maxime