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) |