Topological sort

Puts the vertices of a graph without cycles in an order where every edge points forward, taking vertices in the order they become ready.

Time complexity O(V+E), gograph function gograph.TopologySort.

traverse.NewTopologicalIterator returns the same order one vertex at a time, because it calls gograph.TopologySort.

Go module graph

The module graph of github.com/gin-gonic/gin v1.9.1, as go mod graph prints it. Each edge points from a module to a module version it requires.

A directed graph with 62 vertices and 116 edges.

In what order can the modules be listed, so that each one comes before every module version it requires?

Use it in Go

order, err := gograph.TopologySort(g)
if err != nil {
	return err // gograph.ErrDAGHasCycle
}
for _, v := range order {
	fmt.Println(v.Label())
}

Example graphs

More in Ordering

  • Stable topological sort: Puts the vertices of a graph without cycles in an order where every edge points forward, taking the ready vertex that comes first alphabetically.

All algorithms