[BGL] obtaining list of edges in a shortest path

Hi. I have an adjacency_list graph where I need to find the shortest path between two vertices. This can be done with the following code (from http://www.boost.org/libs/graph/example/astar-cities.cpp): ... vector<mygraph_t::vertex_descriptor> p(num_vertices(g)); vector<cost> d(num_vertices(g)); try { // call astar named parameter interface astar_search (g, start, distance_heuristic<mygraph_t, cost, location*> (locations, goal), predecessor_map(&p[0]).distance_map(&d[0]). visitor(astar_goal_visitor<vertex>(goal))); } catch(found_goal fg) { // found a path to the goal list<vertex> shortest_path; for(vertex v = goal;; v = p[v]) { shortest_path.push_front(v); if(p[v] == v) break; } ... As you can see, it's easy to obtain the list of vertices that makes the shortest path from start to goal, but how do I obtain the list of edges connecting start to goal? - Lars

On Feb 26, 2006, at 7:19 PM, Lars S. Jessen wrote:
As you can see, it's easy to obtain the list of vertices that makes the shortest path from start to goal, but how do I obtain the list of edges connecting start to goal?
Since you have the predecessor "u" for each vertex "v" in your predecessor map, use the "edge(u, v, g)" function to retrieve the edge from u to v. If your graph has parallel edges, search the out-edges of u to find the edge (u, v) with smallest weight. Doug
participants (2)
-
Doug Gregor
-
Lars S. Jessen