QuickGraph查找顶点的不确定性

时间:2014-08-29 13:20:48

标签: c# quickgraph

我使用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)的顶点列表。

1 个答案:

答案 0 :(得分:2)

您可能需要不同的图表类型。潜入一点论坛和QuickGraph的源代码我找到了BidirectionalGraph

  

对稀疏有效的可变有向图数据结构   需要枚举边缘和边缘的图形表示。需要   内存的两倍于邻接图。

检索入学程度的方法似乎可以在IBidirectionalIncidenceGraph上找到this discussion暗示。

您使用的数据结构不会对传入边缘进行簿记,因此您必须通过迭代所有边并查看其目标来检索顶点的入度,这对于大图来说可能是一项昂贵的操作

BidirectionalGraph速度更快,但需要两倍的记忆空间。使用它你可以做类似的事情:

var orphans = graph.Vertices.Where(v => graph.InDegree(v) == 0)