Hey Frank, for early exiting e.g. a BGL Dijkstra algorithm you can throw your local type as a signal and than catch this on the call site. Here are two early exit visitors I found useful:
The first one is for the classical One-To-Many routing, the second one for One-To-Many routing scenario. The call site could look similar to: try { dijkstra_shortest_paths_no_color_map(graph, source, predecessor_map(predMap) .weight_map(weightMap) .disance_map(distanceMap) .visitor(stopOnTarget<Graph>{target})); } catch (const stopSearchSignal&) { } If you need more advanced features e.g. you want to do a bidirectional Dijkstra aborting in "the middle", follow this thread:
Cheers, Daniel J H On 02/22/2016 09:08 PM, Frank Tetzel wrote:
Hi all,
i played around with the bfs example calculating distances to all vertices. Now i just want to calculate the distance between two vertices, so i want to stop when the target vertex is visited.
If i understood the visitor concept correctly it's not really possible to change the behaviour of the algorithm from a visitor. Does anybody know of any workaround to do early exit? Do i have to implement a new algorithm for this?
In a different thread on this list Paolo Bolzoni wrote that he aborts in a custom visitor by throwing an exception. Is this the only way?
I'm using bfs here and not dijkstra because i have uniform edge weights.
Btw, if someone could fix the documentation that would be really nice:
http://www.boost.org/doc/libs/1_60_0/libs/graph/doc/bfs_visitor.html
The code snippet there did not work for me. I had to wrap make_bfs_visitor() in visitor() like it is done in examples/bfs.cpp too.
Regards, Frank _______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users