public static List <Node> KahnAlgorithm(Graph graph)
        {
            var topSort = new List <Node>();
            var nodes   = graph.Nodes.ToList();

            while (nodes.Count != 0)
            {
                var nodeToDelete = nodes
                                   .Where(node => !node.IncidentEdges.Any(edge => edge.To == node))
                                   .FirstOrDefault();

                if (nodeToDelete == null)
                {
                    return(null);
                }
                nodes.Remove(nodeToDelete);
                topSort.Add(nodeToDelete);
                foreach (var edge in nodeToDelete.IncidentEdges.ToList())
                {
                    graph.Delete(edge);
                }
            }
            return(topSort);
        }