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.

Course prerequisites

Fourteen courses of a computer science degree. Each edge points from a course to a course that requires it.

A directed graph with 14 vertices and 18 edges.

In what order can a student take the courses, so that every course comes after the courses 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