-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgraph_reverse.hpp
42 lines (34 loc) · 1.16 KB
/
graph_reverse.hpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
////////////////////////////////////////////////////////////////////////////////
// graph_reverse.hpp
// Graph reverse
// MT, 6.7.15
////////////////////////////////////////////////////////////////////////////////
#ifndef __GRAPH_REVERSE_HPP__
#define __GRAPH_REVERSE_HPP__
#include <iostream>
#include "labeled_graph.hpp"
#include "graph_transform.hpp"
#include "graph_output.hpp"
namespace GraphLibrary {
typedef SimpleGraphEdge<std::string,std::string> Edge;
/// Reverse graph
template<typename GRAPHEDGE>
LabeledDirectedGraph<GRAPHEDGE> reverse(const LabeledDirectedGraph<GRAPHEDGE>& g)
{
/// New reversed graph
LabeledDirectedGraph<Edge> reverse_graph;
// Iterate over all nodes
for (auto n = g.nodes().begin(); n != g.nodes().end(); ++n) {
// Transform edges
auto& neighbours = g[*n];
// Iterate over all leaving edges
for (auto e = neighbours.begin(); e != neighbours.end(); ++e) {
// Reverse edges
// (source becomes target, target becomes source)
reverse_graph.add(Edge(e->target(), e->label(), e->source()));
}
}
return reverse_graph;
}
} // namespace GraphLibrary
#endif