问题描述
在QuickGraph - 有算法找到所有的家长(最多根顶点的)一组顶点的组成。换句话说,就是所有顶点的具有地方根据他们(的方式向叶节点)的一个或多个vertexs投入。因此,如果vertexs分别为节点和边缘是一个依赖关系,发现将由一组给定的节点受到影响的所有节点。
In QuickGraph - is there algorithm for find all parents (up to root vertex's) of a set of vertex's. In other words all vertex's which have somewhere under them (on the way to the leaf nodes) one or more of the vertexs input. So if the vertexs were Nodes, and the edges were a depends on relationship, find all nodes that would be impacted by a given set of nodes.
如果不是多么困难它来写自己的算法?
If not how hard is it to write one's own algorithms?
推荐答案
下面就是我用来完成一个给定的顶点前身搜索:
Here's what I've used to accomplish a predecessor search on a given vertex:
IBidirectionalGraph<int, IEdge<int>> CreateGraph(int vertexCount)
{
BidirectionalGraph<int, IEdge<int>> graph = new BidirectionalGraph<int, IEdge<int>>(true);
for (int i = 0; i < vertexCount; i++)
graph.AddVertex(i);
for (int i = 1; i < vertexCount; i++)
graph.AddEdge(new Edge<int>(i - 1, i));
return graph;
}
static public void Main()
{
IBidirectionalGraph<int, IEdge<int>> graph = CreateGraph(5);
var dfs = new DepthFirstSearchAlgorithm<int, IEdge<int>>(graph);
var observer = new VertexPredecessorRecorderObserver<int, IEdge<int>>();
using (observer.Attach(dfs)) // attach, detach to dfs events
dfs.Compute();
int vertexToFind = 3;
IEnumerable<IEdge<int>> edges;
if (observer.TryGetPath(vertexToFind, out edges))
{
Console.WriteLine("To get to vertex '" + vertexToFind + "', take the following edges:");
foreach (IEdge<int> edge in edges)
Console.WriteLine(edge.Source + " -> " + edge.Target);
}
}
请注意,如果你知道你的根事先,你可以在 dfs.Compute()
方法,指定它(即 dfs.Compute(0)
)。
Note that if you know your root beforehand, you can specify it in the dfs.Compute()
method (i.e. dfs.Compute(0)
).
-Doug
这篇关于QuickGraph - 有一整套的算法找到所有的家长(最多根顶点的)顶点的的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!