|
Boost Users : |
Subject: Re: [Boost-users] [graph] dijkstra additional constrains that will stop the search (ex. distance from source)
From: Jeremiah Willcock (jewillco_at_[hidden])
Date: 2013-04-16 10:37:59
On Tue, 16 Apr 2013, The Maschine wrote:
> Hi all,
>
> I've been reading around the list (Ill post examples below) but I dont
> really know how to implement the thing below.
>
> I want the search to be able to stop based on some "value" or "result
> of a function". For example, every node has a "length" value in a
> custom "struct VertexProperties".
>
> How is it possible for dijkstra_shortest_paths to only consider nodes
> that are inside a radius from the source? Everything else should be
> considered as 'unconnected'.
>
> I have checked a couple of posts form the list but I dont know what do
> really do. (function property map, exceptions in visitors etc)
> http://thread.gmane.org/gmane.comp.lib.boost.user/54392/focus=54397
> http://thread.gmane.org/gmane.comp.lib.boost.user/72072/focus=72074
> http://thread.gmane.org/gmane.comp.lib.boost.user/73358/focus=73384
>
> I havent found any example or source online that deals with something similar.
>
> Any ideas? code example or tutorials?
>
> Best,
> Tasos
>
> my graph for example:
> struct VertexProperties
> {
> double m_length;
> int m_ref;
> };
>
> typedef double Weight;
> typedef boost::property<boost::edge_weight_t, double> EdgeWeightProperty;
> typedef boost::adjacency_list<boost::vecS, boost::vecS,
> boost::undirectedS, VertexProperties, EdgeWeightProperty> unGraph;
Here's the basic idea (not tested); use this as your Dijkstra visitor, and
change the part labeled "threshold" to your threshold computation:
struct threshold_visitor: boost::default_dijkstra_visitor {
double threshold;
threshold_visitor(double threshold): threshold(threshold) {}
struct hit_threshold {};
void examine_vertex(vertex_descriptor v, const unGraph& g) {
if (get(&VertexProperties::m_ref, g, v) > threshold)
throw hit_threshold();
}
};
Remember to wrap your call to Dijkstra's algorithm in a try-catch block
for threshold_visitor::hit_threshold.
-- Jeremiah Willcock
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