15 template <
class Graph>
18 typedef typename boost::graph_traits<Graph>::vertex_descriptor Vertex;
19 typedef typename boost::graph_traits<Graph>::out_edge_iterator EdgeOutIter;
22 std::pair<EdgeOutIter,EdgeOutIter> es;
25 v(v), len(len), es(es), score(0) {}
40 template <
class Graph,
class WeightMap,
class DistanceMap,
class ScoreMap,
class IsUsedMap>
41 double partition_simple(
43 typename boost::graph_traits<Graph>::vertex_descriptor v_start,
44 typename boost::graph_traits<Graph>::vertex_descriptor v_goal,
48 DistanceMap goal_distance_map,
50 IsUsedMap is_used_map)
52 typedef typename boost::graph_traits<Graph>::vertex_descriptor Vertex;
53 typedef typename boost::graph_traits<Graph>::vertex_iterator VertexIter;
54 typedef typename boost::graph_traits<Graph>::edge_descriptor Edge;
55 typedef typename boost::graph_traits<Graph>::edge_iterator EdgeIter;
58 for (std::pair<EdgeIter,EdgeIter> ep=edges(g); ep.first!=ep.second; ep.first++)
59 put(score_map, *ep.first, 0.0);
62 double score_total = 0.0;
65 for (std::pair<VertexIter,VertexIter> vp=vertices(g); vp.first!=vp.second; vp.first++)
66 put(is_used_map, *vp.first,
false);
68 put(is_used_map, v_start,
true);
69 std::vector< partition_simple_el<Graph> > stack;
75 if (stack.back().es.first == stack.back().es.second)
77 put(is_used_map, stack.back().v,
false);
79 double score_popped = stack.back().score;
83 put(score_map, *stack.back().es.first,
84 get(score_map, *stack.back().es.first) + score_popped);
86 stack.back().es.first++;
87 stack.back().score += score_popped;
91 score_total = score_popped;
98 Vertex v_next = target(*stack.back().es.first, g);
101 if (
get(is_used_map, v_next))
103 stack.back().es.first++;
106 double len = stack.back().len +
get(weight_map, *stack.back().es.first);
109 if (len_max < len +
get(goal_distance_map, v_next) )
111 stack.back().es.first++;
116 if (v_next == v_goal)
119 double score = exp(-beta*len);
121 stack.back().score += score;
124 put(score_map, *stack.back().es.first,
125 get(score_map, *stack.back().es.first) + score);
127 stack.back().es.first++;
132 put(is_used_map, v_next,
true);
133 stack.push_back(partition_simple_el<Graph>(v_next, len, out_edges(v_next, g)));
Definition: partition_simple.h:16