我使用QuickGraph创建有向无环图。我需要找到其indegree为零的所有顶点。我没有在图表的Vertices
集合上看到这种支持,也没有看到使用LINQ过滤的方法。
以下是我正在编写的示例数据结构:
var componentGraph = new AdjacencyGraph<Component, Edge<Component>>();
var serverOnMachineA = new TalismaServerComponent("CLTDEPAPI10");
var serverOnMachineB = new TalismaServerComponent("CLTDEPAPI11");
var appServerOnMachineB = new TalismaAppServerComponent("CLTDEPAPI11");
var webComponentsOnMachineC = new TalismaWebComponentsComponent("CLTDEPFE1");
componentGraph.AddVertex(serverOnMachineA);
componentGraph.AddVertex(serverOnMachineB);
componentGraph.AddVertex(appServerOnMachineB);
componentGraph.AddVertex(webComponentsOnMachineC);
componentGraph.AddEdge(new Edge<Component>(appServerOnMachineB, serverOnMachineA));
componentGraph.AddEdge(new Edge<Component>(webComponentsOnMachineC, appServerOnMachineB));
componentGraph.AddEdge(new Edge<Component>(webComponentsOnMachineC, serverOnMachineB));
我只需要在此图中没有“in”边缘(indegree = 0)的顶点列表。
答案 0 :(得分:2)
您可能需要不同的图表类型。潜入一点论坛和QuickGraph的源代码我找到了BidirectionalGraph类
对稀疏有效的可变有向图数据结构 需要枚举边缘和边缘的图形表示。需要 内存的两倍于邻接图。
检索入学程度的方法似乎可以在IBidirectionalIncidenceGraph
上找到this discussion暗示。
您使用的数据结构不会对传入边缘进行簿记,因此您必须通过迭代所有边并查看其目标来检索顶点的入度,这对于大图来说可能是一项昂贵的操作
BidirectionalGraph
速度更快,但需要两倍的记忆空间。使用它你可以做类似的事情:
var orphans = graph.Vertices.Where(v => graph.InDegree(v) == 0)