| Graphs: | directed acyclic |
|---|---|
| Properties: | color |
| Complexity: | time: O(V + E) |
| Where Defined: | boost/graph/topological_sort.hpp |
(1)
template <class VertexListGraph, class OutputIterator>
void topological_sort(VertexListGraph& G, OutputIterator iter)
(2)
template <class VertexListGraph, class OutputIterator, class Visitor>
void topological_sort(VertexListGraph& G, OutputIterator iter,
Visitor visit)
(3)
template <class VertexListGraph, class OutputIterator,
class ColorMap, class DFSVisitor>
void topological_sort(VertexListGraph& G, OutputIterator iter,
ColorMap color, DFSVisitor visit)
The topological sort algorithm creates a linear ordering of the vertices such that if edge (u,v) appears in the graph, then u comes before v in the ordering. The graph must be a directed acyclic graph (DAG). The implementation consists mainly of a call to depth_first_search().
Calculate a topological ordering of the vertices.
typedef adjacency_list< vecS, vecS, directedS, color_property<> > Graph;
typedef boost::graph_traits<Graph>::vertex_descriptor Vertex;
Pair edges[7] = { Pair(0,1), Pair(2,4),
Pair(2,5),
Pair(0,3), Pair(1,4),
Pair(4,3), Pair(5,5) };
Graph G(6, edges, edges + 7);
typedef std::vector< Vertex > container;
container c;
topological_sort(G, std::back_inserter(c));
cout << "A topological ordering: ";
for ( container::reverse_iterator ii=c.rbegin(); ii!=c.rend(); ++ii)
cout << index(*ii) << " ";
cout << endl;
The output is:
A topological ordering: 2 5 0 1 4 3
| Copyright © 2000 | Jeremy Siek, Univ.of Notre Dame (jsiek@lsc.nd.edu) |