namespace NodePipeline.Engine.Graph; public static class TopologicalSorter { public static List Sort(Dictionary> graph) { var indegree = graph.ToDictionary(kv => kv.Key, _ => 0); foreach (var edges in graph.Values) foreach (var to in edges) indegree[to]++; var queue = new Queue(indegree.Where(kv => kv.Value == 0).Select(kv => kv.Key)); var result = new List(); while (queue.Count > 0) { var n = queue.Dequeue(); result.Add(n); foreach (var m in graph[n]) if (--indegree[m] == 0) queue.Enqueue(m); } return result; } }