拓扑依赖算法(依赖关系)
拓扑依赖算法(依赖关系)
internal static List<Type> SortDependencies(Dictionary<Type, List<Type>> dependencies)
{
var sortedList = new List<Type>();
var visitedNodes = new HashSet<Type>();
var temporaryMarkedNodes = new HashSet<Type>();
foreach (var node in dependencies.Keys)
{
if (!visitedNodes.Contains(node))
{
VisitNode(node, dependencies, visitedNodes, sortedList, temporaryMarkedNodes);
}
}
return sortedList;
}
internal static void VisitNode(Type node, Dictionary<Type, List<Type>> dependencies, HashSet<Type> visitedNodes, List<Type> sortedList, HashSet<Type> temporaryMarkedNodes)
{
if (temporaryMarkedNodes.Contains(node))
{
throw new ArgumentException("The graph contains a cycle.");
}
if (!visitedNodes.Contains(node))
{
temporaryMarkedNodes.Add(node);
foreach (var dependentNode in dependencies[node])
{
VisitNode(dependentNode, dependencies, visitedNodes, sortedList, temporaryMarkedNodes);
}
visitedNodes.Add(node);
temporaryMarkedNodes.Remove(node);
sortedList.Insert(0, node);
}
}
如果您觉得本文对你有用,不妨帮忙点个赞,或者在评论里给我一句赞美,小小成就都是今后继续为大家编写优质文章的动力,百小僧拜谢!
欢迎您持续关注我的博客:)
版权所有,欢迎保留原文链接进行转载:)