3#include <boost/bimap.hpp>
4#include <boost/functional/hash.hpp>
5#include <boost/graph/adjacency_list.hpp>
6#include <boost/graph/connected_components.hpp>
7#include <boost/graph/copy.hpp>
8#include <boost/graph/depth_first_search.hpp>
9#include <boost/graph/dominator_tree.hpp>
10#include <boost/graph/graph_traits.hpp>
11#include <boost/graph/reverse_graph.hpp>
12#include <boost/graph/strong_components.hpp>
13#include <boost/graph/topological_sort.hpp>
18#include <unordered_map>
19#include <unordered_set>
24typedef boost::adjacency_list<boost::listS, boost::listS, boost::bidirectionalS>
Graph;
25typedef boost::graph_traits<Graph>::vertex_descriptor
Vertex;
26typedef boost::graph_traits<Graph>::edge_descriptor
Edge;
28typedef boost::adjacency_list<boost::listS, boost::listS, boost::undirectedS>
UndirectedGraph;
32typedef boost::graph_traits<ReverseGraph>::edge_descriptor
ReverseEdge;
34typedef std::unordered_map<Vertex, size_t>
IndexMap;
54 std::unique_ptr<const UndirectedGraph>,
55 const std::unordered_map<Vertex, Vertex>,
56 const std::unordered_map<Vertex, Vertex>>
79 std::list<std::list<Edge>>& all_paths,
80 std::list<Edge>& current_path,
81 std::set<Vertex>& visited
boost::graph_traits< Graph >::vertex_descriptor Vertex
Definition graph.h:25
void all_simple_paths_dfs(const Graph &graph, const Edge edge, const Vertex v, std::list< std::list< Edge > > &all_paths, std::list< Edge > ¤t_path, std::set< Vertex > &visited)
const std::unordered_map< Vertex, Vertex > dominator_tree(const Graph &graph, const Vertex src)
boost::reverse_graph< Graph > ReverseGraph
Definition graph.h:31
const std::list< Edge > back_edges(const Graph &graph, const graph::Vertex start)
std::pair< size_t, const std::unordered_map< Vertex, size_t > > weakly_connected_components(const Graph &graph)
boost::graph_traits< Graph >::edge_descriptor Edge
Definition graph.h:26
boost::adjacency_list< boost::listS, boost::listS, boost::undirectedS > UndirectedGraph
Definition graph.h:28
boost::adjacency_list< boost::listS, boost::listS, boost::bidirectionalS > Graph
Definition graph.h:24
const std::unordered_map< Vertex, Vertex > post_dominator_tree(Graph &graph)
const std::list< graph::Vertex > topological_sort(const Graph &graph)
const std::tuple< std::unique_ptr< const UndirectedGraph >, const std::unordered_map< Vertex, Vertex >, const std::unordered_map< Vertex, Vertex > > undirected(const Graph &graph)
const ReverseGraph reverse(const Graph &graph)
std::unordered_map< Vertex, size_t > IndexMap
Definition graph.h:34
std::pair< int, std::unordered_map< Vertex, size_t > > strongly_connected_components(const Graph &graph)
boost::graph_traits< ReverseGraph >::edge_descriptor ReverseEdge
Definition graph.h:32
const std::list< Vertex > depth_first_search(const Graph &graph, const graph::Vertex start)
boost::graph_traits< UndirectedGraph >::edge_descriptor UndirectedEdge
Definition graph.h:29
const std::list< std::list< Edge > > all_simple_paths(const Graph &graph, const Vertex src, const Vertex dst)
bool is_acyclic(const Graph &graph)
void discover_vertex(Vertex v, const Graph &g)
Definition graph.h:42
DFSVisitor(std::list< Edge > &back_edges, std::list< Vertex > &nodes)
Definition graph.h:40
std::list< Edge > & back_edges_
Definition graph.h:38
std::list< Vertex > & nodes_
Definition graph.h:37
void back_edge(Edge e, const Graph &g)
Definition graph.h:46