My Project
graph.h
1 
9 #ifndef GRAPH_H
10 #define GRAPH_H
11 
12 #include "node.h"
13 #include "utils.h"
14 
15 enum GraphType {
16  DIRECTED, UNDIRECTED
17 };
18 
19 class Graph {
20 
22  GraphType graph_type;
23 
25  std::vector<Node*> nodes;
26 
28  std::vector<std::vector<Node*> > edges;
29 
30 public:
31 
32  Graph();
33  Graph(GraphType type);
34  virtual ~Graph();
35 
37  uint node_count() const;
38 
40  void insert_node(Node* node);
41 
43  void insert_edge(Node* node1, Node* node2);
44 
46  std::vector<Node*>& get_nodes();
47 
49  std::vector<Node*>& get_neighbours(const Node& node);
50 
54  void reset();
55 
56  int time;
57 
59  std::stack<Node*> stack;
60  std::vector<std::vector<Node*> > ctc;
61 
62  void print_ctc() const;
63 
65  std::stack<std::pair<int, int> > edges_stack;
66  std::vector<Node*> articulation_points;
67  std::vector<std::pair<Node*, Node*> > critical_edges;
68 
70  friend std::istream& operator>>(std::istream& in, Graph& node);
71  friend std::ostream& operator<<(std::ostream& out, Graph& node);
72 };
73 
74 #endif
std::vector< Node * > & get_neighbours(const Node &node)
Definition: graph.cpp:42
void insert_node(Node *node)
Definition: graph.cpp:29
Definition: node.h:14
void reset()
Definition: graph.cpp:46
Definition: graph.h:19
friend std::istream & operator>>(std::istream &in, Graph &node)
Definition: graph.cpp:102
GraphType graph_type
Definition: graph.h:22
std::vector< std::vector< Node * > > edges
Definition: graph.h:28
uint node_count() const
Definition: graph.cpp:25
Graph()
Definition: graph.cpp:11
std::vector< Node * > & get_nodes()
Definition: graph.cpp:38
std::stack< std::pair< int, int > > edges_stack
Definition: graph.h:65
void insert_edge(Node *node1, Node *node2)
Definition: graph.cpp:34
std::vector< Node * > nodes
Definition: graph.h:25
std::stack< Node * > stack
Definition: graph.h:59