# Graph Topological Sort — Kahn’s Algorithm

In another article (Graph Topological Sort — JavaScript implementation) I implement topological sort using DFS, here is the implementation of Kahn’s Algorithm, inspired by this tutorial video:

# Kahn’s Algorithm

• Repeatedly remove vertices without any dependencies from the graph and add them to the topological ordering array
• When one vertex is removed, its neighbors become free, so they are the candidates for the next removal.
• Keep removing vertices without dependencies until all nodes are processed, or a cycle is discovered.

# Example Graph

• Counting the incoming degree of each vertex
incoming degree : how many edges point to this vertex
A’s incoming degree = 0
B’s incoming degree = 1
D’s incoming degree = 2
• A vertex without dependencies means its incoming degree = 0.
• Create a queue to store vertices without dependencies, and use an index to keep track the removal count, this index can be topological number associated to the removed vertex.
• When we visit a vertex and remove it, we decrease its neighbors incoming degree, if one’s incoming degree becomes 0, add it into queue.
• When queue is empty, either all vertices are removed or a cycle is encountered, that is, there are some vertices left without visit but their incoming degree will never reduce to 0 because they point to each other.

JavaScript Implementation