Note

This is the documentation for the current state of the development branch of rustworkx. The documentation or APIs here can change prior to being released.

rustworkx.topological_sort#

topological_sort(graph, /)#

Return the topological sort of node indices from the provided directed graph.

Computes a topological ordering of the nodes in the given directed graph, ensuring that for every directed edge from node \(u\) to node \(v\), node \(u\) appears before node \(v\) in the resulting sequence. This is particularly useful in scenarios such as task scheduling and dependency resolution, where certain tasks must be completed before others.

>>> G = rx.PyDiGraph()
>>> G.add_nodes_from(["A", "B", "C", "D", "E", "F", "G"])
>>> G.add_edges_from_no_data([(0, 1),(1, 2), (2, 3), (3, 4), (5, 2), (6, 3)])
>>> rx.topological_sort(G)
NodeIndices[6, 5, 0, 1, 2, 3, 4]

For more advanced control over the nodes iteration, see TopologicalSorter.

For custom sorting algorithm, see lexicographical_topological_sort().

Parameters:

graph (PyDiGraph) – The directed graph to get the topological sort on.

Returns:

A list of node indices topologically sorted.

Return type:

NodeIndices

Raises:

DAGHasCycle – if a cycle is encountered while sorting the graph.