Go to the documentation of this file.
87 typedef std::pair<vertex,vertex>
edge;
92 typedef std::map<vertex, in_out_edge_sets>
adj_graph;
108 unsigned int num_edges_;
172 tGraph(): G_(), num_edges_(0), undirected_(false){}
173 tGraph(std::istream &s): G_(), num_edges_(0), undirected_(false)
179 undirected_(B.undirected_){}
182 for (
typename edge_set::const_iterator p = E.begin();
214 {
return (
find(a))->second.first;}
216 {
return (G_[a]).first; }
219 {
return find(a)->second.second;}
221 {
return G_[a].second; }
261 typename adj_graph::iterator p =
find(a);
267 num_edges_ -= p->second.second.size();
270 G_[a] = make_pair(IN, OUT);
271 num_edges_ += OUT.size();
289 vertex smallest = ( a < b ? a : b);
304 if (new_size > old_size)
357 if (pa ==
end() || pb ==
end())
417 for (
typename vertex_set::iterator p = out_edges.begin();
418 p!=out_edges.end(); p++)
425 for (
typename vertex_set::iterator p = in_edges.begin();
426 p!=in_edges.end(); p++)
438 for (
typename vertex_set::const_iterator p=V.begin(); p!=V.end(); p++)
458 return (
find(a) != G_.end());
506 for (
typename vertex_set::const_iterator q= out.begin(); q != out.end(); q++)
524 for (
typename vertex_set::const_iterator q= out.begin();
555 for (
typename vertex_set::const_iterator q= out.begin();
599 typedef std::vector<edge> VE;
602 for (
typename VE::cosnt_iterator e = b.begin(); e != b.end(); e++)
615 typedef std::vector<tGraph::edge> VE;
617 VE b = B.edge_list();
618 for (
typename VE::const_iterator e = b.begin(); e != b.end(); e++)
629 I.insert_vertex(
node(p) );
647 for (
typename vertex_set::const_iterator p = A.begin(); p!=A.end(); p++)
665 for (
typename vertex_set::const_iterator p = A.begin(); p!=A.end(); p++)
668 if (pG != this->
end())
684 double sparsity = (A.size() ==1 ? 0.0 :
subgraph_size(A)/(N * (N-1)));
717 {
return (p->second).first; }
720 {
return (p->second).first; }
735 {
return (p->second).second; }
750 {
return (p->second).second; }
774 return (p->second).second.size();
779 return (p->second).second.size();
788 return (p->second).first.size();
793 return (p->second).first.size();
838 for (
typename vertex_set::iterator p = b_out.begin();
852 for (
typename vertex_set::iterator p = b_in.begin();
929 static std::istream &
read_line(std::istream &s, T &v1, T &v2,
935 while (getline(s, line) && line.size() < 1);
945 if (line[0] ==
'%' || line[0] ==
'#')
955 std::istringstream L(line);
986 std::vector<typename tGraph<T>::edge> E;
992 for (
typename vertex_set::const_iterator t = out.begin();
995 E.push_back(
edge(a, *t));
1004 template <
typename T>
1025 template <
typename T>
1041 s << v <<
" " << *q <<
"\n";
1048 template <
typename T>
1052 std::cerr <<
"# vertices: " << num_vertices() <<
"\n";
1053 std::cerr <<
"# edges: " << num_edges() <<
"\n";
1060 for (
typename vertex_set::const_iterator q=out.begin();
1062 std::cerr << p->first <<
" --> " << *q <<
"\n";
1064 std::cerr << std::endl;
tGraph operator-(const tGraph &B) const
Definition: ngraph.hpp:566
iterator node_iterator
Definition: ngraph.hpp:132
std::map< vertex, in_out_edge_sets > adj_graph
Definition: ngraph.hpp:92
adj_graph::iterator iterator
Definition: ngraph.hpp:129
vertex_neighbor_const_iterator out_neighbors_begin(const vertex &a) const
Definition: ngraph.hpp:156
void absorb(iterator pa, iterator pb)
Definition: ngraph.hpp:822
void remove_undirected_edge(const vertex &a, const vertex &b)
Definition: ngraph.hpp:398
@ VERTEX
Definition: ngraph.hpp:100
void insert_vertex(const vertex &a)
Definition: ngraph.hpp:253
bool includes_edge(const edge &e) const
Definition: ngraph.hpp:479
void remove_edge(const edge &E)
Definition: ngraph.hpp:393
vertex_set::iterator vertex_iterator
Definition: ngraph.hpp:97
tGraph(const tGraph &B)
Definition: ngraph.hpp:178
tGraph(std::istream &s)
Definition: ngraph.hpp:173
static vertex_iterator out_begin(iterator p)
Definition: ngraph.hpp:752
const_iterator const_node_iterator
Definition: ngraph.hpp:133
static unsigned int degree(const_iterator p)
Definition: ngraph.hpp:796
vertex_set::iterator vertex_neighbor_iterator
Definition: ngraph.hpp:102
T vertex
Definition: ngraph.hpp:85
void insert_edge(const vertex &a, const vertex &b)
Definition: ngraph.hpp:318
const_iterator begin() const
Definition: ngraph.hpp:140
edge_set::const_iterator const_edge_iterator
Definition: ngraph.hpp:95
tGraph< int > iGraph
Definition: ngraph.hpp:978
void remove_vertex_set(const vertex_set &V)
Definition: ngraph.hpp:436
double subgraph_sparsity(const vertex_set &A) const
Definition: ngraph.hpp:680
bool includes_vertex(const vertex &a) const
Definition: ngraph.hpp:456
void insert_edge(const edge &E)
Definition: ngraph.hpp:343
static const_vertex_iterator out_begin(const_iterator p)
Definition: ngraph.hpp:737
std::pair< vertex_set, vertex_set > in_out_edge_sets
Definition: ngraph.hpp:91
void set_undirected()
Definition: ngraph.hpp:198
vertex_set::const_iterator const_vertex_iterator
Definition: ngraph.hpp:98
static unsigned int out_degree(iterator p)
Definition: ngraph.hpp:777
std::vector< edge > edge_list() const
Definition: ngraph.hpp:983
unsigned int degree(const vertex &a) const
Definition: ngraph.hpp:234
std::set< edge > edge_set
Definition: ngraph.hpp:90
vertex_set & in_neighbors(const vertex &a)
Definition: ngraph.hpp:215
unsigned int out_degree(const vertex &a) const
Definition: ngraph.hpp:229
iterator begin()
Definition: ngraph.hpp:139
static vertex_set & out_neighbors(iterator p)
Definition: ngraph.hpp:749
static const vertex & node(iterator p)
Definition: ngraph.hpp:705
static const_vertex_iterator in_end(const_iterator p)
Definition: ngraph.hpp:728
tGraph & plus_eq(const tGraph &B)
Definition: ngraph.hpp:498
iterator smart_absorb(iterator pa, iterator pb)
Definition: ngraph.hpp:878
vertex_neighbor_iterator out_neighbors_end(const vertex &a)
Definition: ngraph.hpp:161
void clear()
Definition: ngraph.hpp:144
tGraph subgraph(const vertex_set &A) const
Definition: ngraph.hpp:643
const_iterator find(const vertex &a) const
Definition: ngraph.hpp:208
static const vertex & node(const_vertex_iterator p)
Definition: ngraph.hpp:710
static unsigned int in_degree(const_iterator p)
Definition: ngraph.hpp:786
bool is_undirected() const
Definition: ngraph.hpp:187
void remove_vertex(iterator pa)
Definition: ngraph.hpp:408
std::set< vertex > vertex_set
Definition: ngraph.hpp:89
@ EMPTY
Definition: ngraph.hpp:100
void remove_edge(const vertex &a, const vertex &b)
Definition: ngraph.hpp:382
static unsigned int num_edges(iterator p)
Definition: ngraph.hpp:763
static bool isolated(const_iterator p)
Definition: ngraph.hpp:807
vertex_set::const_iterator vertex_neighbor_const_iterator
Definition: ngraph.hpp:103
unsigned int subgraph_size(const vertex_set &A) const
Definition: ngraph.hpp:662
vertex_set & out_neighbors(const vertex &a)
Definition: ngraph.hpp:220
tGraph()
Definition: ngraph.hpp:172
static bool isolated(iterator p)
Definition: ngraph.hpp:812
edge_set::iterator edge_iterator
Definition: ngraph.hpp:94
tGraph operator*(const tGraph &B) const
Definition: ngraph.hpp:535
static const vertex & node(const_iterator p)
Definition: ngraph.hpp:700
unsigned int num_vertices() const
Definition: ngraph.hpp:135
bool is_directed() const
Definition: ngraph.hpp:193
static vertex_set & in_neighbors(iterator p)
Definition: ngraph.hpp:719
static unsigned int out_degree(const_iterator p)
Definition: ngraph.hpp:772
int intersection_size(const std::set< T > &A, const std::set< T > &B)
Definition: set_ops.hpp:138
adj_graph::const_iterator const_iterator
Definition: ngraph.hpp:130
static unsigned int num_edges(const_iterator p)
Definition: ngraph.hpp:758
static unsigned int degree(iterator p)
Definition: ngraph.hpp:801
static const vertex_set & in_neighbors(const_iterator p)
Definition: ngraph.hpp:716
unsigned int in_degree(const vertex &a) const
Definition: ngraph.hpp:224
tGraph intersect(const tGraph &B) const
Definition: ngraph.hpp:514
tGraph minus(const tGraph &B) const
Definition: ngraph.hpp:541
static const vertex_set & out_neighbors(const_iterator p)
Definition: ngraph.hpp:734
void print() const
Definition: ngraph.hpp:1049
vertex smart_absorb(vertex a, vertex b)
Definition: ngraph.hpp:893
tGraph & operator+=(const tGraph &B)
Definition: ngraph.hpp:585
bool includes_edge(const vertex &a, const vertex &b) const
Definition: ngraph.hpp:468
void insert_new_vertex_inout_list(const vertex &a, const vertex_set &IN, const vertex_set &OUT)
Definition: ngraph.hpp:258
const_iterator end() const
Definition: ngraph.hpp:142
static unsigned int in_degree(iterator p)
Definition: ngraph.hpp:791
unsigned int num_nodes() const
Definition: ngraph.hpp:136
std::istream & operator>>(std::istream &s, tGraph< T > &G)
Definition: ngraph.hpp:1005
void insert_edge(iterator pa, iterator pb)
Definition: ngraph.hpp:282
A mathematical graph object: a simple, directed, connected graph, where nodes are of arbitrary type (...
Definition: ngraph.hpp:76
tGraph(const edge_set &E)
Definition: ngraph.hpp:180
vertex_neighbor_iterator out_neighbors_begin(const vertex &a)
Definition: ngraph.hpp:151
T value_type
Definition: ngraph.hpp:86
tGraph operator+(const tGraph &B) const
Definition: ngraph.hpp:580
void remove_vertex(const vertex &a)
Definition: ngraph.hpp:443
void remove_undirected_edge(const edge &e)
Definition: ngraph.hpp:403
void insert_edge_noloop(const vertex &a, const vertex &b)
Definition: ngraph.hpp:311
const vertex_set & in_neighbors(const vertex &a) const
Definition: ngraph.hpp:213
vertex_neighbor_const_iterator out_neighbors_end(const vertex &a) const
Definition: ngraph.hpp:166
unsigned int num_edges() const
Definition: ngraph.hpp:137
void insert_undirected_edge(const edge &E)
Definition: ngraph.hpp:348
line_type
Definition: ngraph.hpp:100
tGraph< std::string > sGraph
Definition: ngraph.hpp:979
void insert_undirected_edge(const vertex &a, const vertex &b)
Definition: ngraph.hpp:337
@ EDGE
Definition: ngraph.hpp:100
bool isolated(const vertex &a) const
Definition: ngraph.hpp:244
bool includes_elm(const std::set< T > &A, constT &a)
Definition: set_ops.hpp:115
Definition: ngraph.hpp:80
static std::istream & read_line(std::istream &s, T &v1, T &v2, std::string &line, line_type &t)
Definition: ngraph.hpp:929
std::pair< vertex, vertex > edge
Definition: ngraph.hpp:87
@ COMMENT
Definition: ngraph.hpp:100
void insert_edge_noloop(iterator pa, iterator pb)
Definition: ngraph.hpp:276
std::ostream & operator<<(std::ostream &s, const tGraph< T > &G)
Definition: ngraph.hpp:1026
static const_vertex_iterator in_begin(const_iterator p)
Definition: ngraph.hpp:722
void absorb(vertex a, vertex b)
Definition: ngraph.hpp:912
bool remove_edge(iterator pa, iterator pb)
Definition: ngraph.hpp:355
tGraph< unsigned int > Graph
Definition: ngraph.hpp:977
iterator find(const vertex &a)
Definition: ngraph.hpp:203
const vertex_set & out_neighbors(const vertex &a) const
Definition: ngraph.hpp:218
iterator end()
Definition: ngraph.hpp:141
Base class implementing a node in the computational graph.
Definition: computational_node.h:31
tGraph plus(const tGraph &B) const
Definition: ngraph.hpp:572
static const_vertex_iterator out_end(const_iterator p)
Definition: ngraph.hpp:743