|
Boost Users : |
From: Vladimir Prus (ghost_at_[hidden])
Date: 2008-02-16 11:11:07
Christian Sturz wrote:
> Hi,
>
> I'm looking for an appropriate Boost Graph algorithm for the following
> problem:
>
> my graph (based on adjacency_list) represents the control-flow graph
> of a program where each vertex is a statement and the control-flow
> relations between the statements are modeled by edges. Now I'm looking
> for an algorithm that finds all vertices that can be reached from a
> defined statement. So, what I need is a back-traversal of the graph,
> from the given vertex to all predecessors and so forth.
If you want to find all vertices reachable from a given one, you can
use depth_first_search, using a custom visitor to record all seen
vertices.
There's also the reverse_graph adaptor that can be used
to traverse a graph in opposite direction.
> I didn't find any algorithm in the Boost Graph Library. The "strong_components" algorithm might be
> OK since it assumes a directed graph (as is mine) but the algorithm seems to operate in the
> direction of the directed edges.
The strong_components will find strongly connected components, and it does not
seem that's what you're after. In particular, for a asyclic program graph,
strong_components will not give any results of interest at all.
> Obviously I need the the opposite direction.
Well, unfortunately you did not explain clearly what exact
program analysis problem you are trying to solve, so it's not
obvious. In any case, reverse_graph can be used.
- Volodya
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