我是图论的新手.
我已经使用QuickGraph库创建了一个邻接图,最终,我希望从图中获得连接的组件.
open QuickGraph
let tup = [(1M,1M); (2M, 18M); (3M, 3M); (4M, 5M); (5M, 24M); (24M, 6M); (7M, 6M); (8M, 9M); (10M, 9M)]
type Vertex = {decimal: decimal}
let edges =
tup
|> List.map (fun x -> ({decimal = fst x}, {decimal = snd x}))
|> List.map (fun x -> Edge<Vertex> x)
//Undirected Graph
let undirGraph = edges.ToUndirectedGraph()
undirGraph.Edges
undirGraph.Vertices
let x = QuickGraph.Algorithms.ConnectedComponents.ConnectedComponentsAlgorithm(undirGraph)
Run Code Online (Sandbox Code Playgroud)
输出来自undirGraph.Edges:
val it : Collections.Generic.IEnumerable<Edge<Vertex>> =
seq
[FSI_0227+Vertex->FSI_0227+Vertex {Source = {decimal …Run Code Online (Sandbox Code Playgroud) 这里有点远,因为我没有HoffmanPavleyRankedShortestPathAlgorithm在QuickGraph中找到太多的文档 ,所以我猜不是很多人都使用它,但是我有一些问题用Ranked Shortest Path返回正确的结果算法并且想知道是否有人发现了同样的问题.
我正在填充具有1900个顶点和20000个边缘的双向图形,并且我将图形设置为返回150个路径.它做到了这一点,但它没有带回预期的几条路径,即应该排在前20条最短路径的路径.我对系统的期望是,如果我要求150条路径,它将按顺序返回150条最短路径.
现在,当我将其设置为返回超过1000个路径时,则显示预期路径.有没有人遇到过这样的问题,可能有办法改进图形设置?我不能让系统返回1000个路径,因为处理时间太长.
以下是相关代码:图形设置:
BidirectionalGraph<string, TaggedEdge<string, int>> pathGraph = new BidirectionalGraph<string, TaggedEdge<string, int>>();
... add vertices and edges
Run Code Online (Sandbox Code Playgroud)
算法设置:
HoffmanPavleyRankedShortestPathAlgorithm<string, TaggedEdge<string, int>> hoffmanAlgorithm = new HoffmanPavleyRankedShortestPathAlgorithm<string, TaggedEdge<string, int>>(pathGraph, E => 1.0);
try
{
hoffmanAlgorithm.ShortestPathCount = 150;
hoffmanAlgorithm.SetRootVertex(startPoint.ToString());
hoffmanAlgorithm.Compute(startPoint.ToString(), endPoint.ToString());
foreach (IEnumerable<TaggedEdge<string, int>> path in hoffmanAlgorithm.ComputedShortestPaths)
{
//process results...
}
}
Run Code Online (Sandbox Code Playgroud)
正如我所说的那样,我对这里得到回应并不过分有信心,但我想我还是会尝试的.关于CodePlex的QuickGraph讨论论坛似乎不再有人,或者我会在那里尝试.
非常感谢
这是我的问题的一个例子.

我想以这种方式在C#中对此进行编码,以便我可以查询结构并查找如下信息:
所以我认为我会使用邻接列表来模拟我的图形,但后来我认为这是常见的事情,并开始寻找库以帮助加快过程(无需重新发明轮子等等)
我偶然发现了这个图书馆,在各种主题上推荐了几次,但我发现上面绘制的图形真的很难建模.
错误:
GraphMLExtensions.SerializeToGraphML<TVertex, TEdge, TGraph>(TGraph, XmlWriter)无法根据用法推断方法的类型参数 .
using System.Xml;
using QuickGraph;
using QuickGraph.Serialization;
var g = new AdjacencyGraph<string, Edge<string>>();
.... add some vertices and edges ....
using (var xwriter = XmlWriter.Create("somefile.xml"))
g.SerializeToGraphML(xwriter);
Run Code Online (Sandbox Code Playgroud)
代码是从QuickGraph的文档中复制的.但是,当我明确地写它时,它有效:
using (var xwriter = XmlWriter.Create("somefile.xml"))
GraphMLExtensions.SerializeToGraphML<string, Edge<string>, AdjacencyGraph<string, Edge<string>>>(g, xwriter);
Run Code Online (Sandbox Code Playgroud)
编辑:我看到了一些相关的问题,但它们对我来说太先进了.我只是担心使用它.我做错了什么还是文件?
我有一个AdjacencyGraph<string, Edge<string>>我想要运行AlgorithmExtensions.ShortestPathsDijkstra的,但QuickGraph文档并不是最好的.
有没有人有我可以效仿的例子?
我在Google上找到的所有东西都使用了一个观察者,AlgorithmExtension不需要它.
我试图弄清楚如何使用QuickGraph for C#创建无向加权图的新实例。我的目标是创建一个无向加权图,其中填充了随机数量的节点以及随机生成的开始和结束节点,这些节点的最短路径可以使用“广度优先搜索”算法找到。该文档没有太多内容,因此如果有人可以提供任何帮助,我们将不胜感激。
在 QuickGraph 中 - 是否有算法可以查找一组顶点的所有父级(直到根顶点)。换句话说,所有顶点的下方某处(在通往叶节点的路上)都有一个或多个顶点输入。因此,如果顶点是节点,边是依赖关系,则找到将受给定节点集影响的所有节点。
如果不是的话,编写自己的算法有多难?
我进行了一个寻路库.QuickGraph,开放图形库,符合我的所有要求,但我遇到了一个问题.我需要最短路径算法来跳过当前移动代理无法通过的边缘.我想要的是这样的:
Func<SEquatableEdge<VectorD3>, double> cityDistances = delegate(SEquatableEdge<VectorD3> edge)
{
if(edge.IsPassableBy(agent))
return edgeWeight; // Edge is passable, return its weight
else
return -1; // Edge is impassable, return -1, which means, that path finder should skip it
};
Func<VectorD3, double> heuristic = ...;
TryFunc<VectorD3, IEnumerable<SEquatableEdge<VectorD3>>> tryGetPath = graph2.ShortestPathsAStar(cityDistances, heuristic, sourceCity);
Run Code Online (Sandbox Code Playgroud)
我可以想象通过创建图形副本并删除不可通过的边缘来解决这个问题,但这是不必要的浪费计算机资源.请问,我可以提示我如何解决这个问题?或者没有解决方案,我应该更新源?
我想使用QuickGraph使用GraphViz在C#中绘制一些图形.我已经看过CodePlex和CodeProject提供的库.他们似乎完全不同.
两者之间有哪些主要区别?
我使用的是 QuickGraph 3.6 版,我找到了函数 SetRootVertex,但没有 SetTagretVertex。我需要这个,因为我正在巨大的图中搜索短路径,这会大大加快程序速度。
有问题的类是 DijkstraShortestPathAlgorithm 和 AStarShortestPathAlgorithm。
我是c#,wpf和pdfsharp库的新手.这是我的XAML代码:
<Grid>
<zoom:ZoomControl>
<graphsharp:GraphLayout x:Name="graphLayout"
Graph="{Binding ElementName=root, Path=GraphToVisualize}"
LayoutAlgorithmType="FR"
OverlapRemovalAlgorithmType="FSA"
HighlightAlgorithmType="Simple"></graphsharp:GraphLayout>
</zoom:ZoomControl>
<Button Content="Button" Height="23" Name="button1" Width="75" Margin="12,294,658,412" Click="button1_Click" />
</Grid>
Run Code Online (Sandbox Code Playgroud)
我现在想要使用Pdfsharp将我的"graphLayout"保存到pdf文件中.我创建了一个按钮,基本上使用了pdfsharp wiki中的"hello world"示例代码来启动.
PdfDocument document = new PdfDocument();
document.Info.Title = "Created with PDFsharp";
PdfPage page = document.AddPage();
XGraphics gfx = XGraphics.FromPdfPage(page);
XFont font = new XFont("Verdana", 20, XFontStyle.BoldItalic);
gfx.DrawString("My Graph", font, XBrushes.Black,
new XRect(0, 0, page.Width, page.Height),
XStringFormats.TopCenter);
const string filename = "MyGraph.pdf";
document.Save(graphLayout+filename);
Process.Start(filename);
Run Code Online (Sandbox Code Playgroud)
我得到一个pdf,但其中只有文字.有人可以告诉我,我如何将整个布局保存为PDF格式?谢谢
Q1 - 如何将边缘与类关联?(即就像使用顶点一样)
就我而言,我希望能够对各种类型的边缘进行建模。所以我想我真正的问题是如何将某种级别的数据与边缘(例如边缘类型)相关联。
我正在查看使用的图表是: http ://quickgraph.codeplex.com/wikipage?title=Bi DirectionGraph&referringTitle=Documentation
谢谢
quickgraph ×12
c# ×10
.net ×3
graph ×3
a-star ×1
algorithm ×1
c#-4.0 ×1
comparison ×1
dijkstra ×1
f# ×1
graphviz ×1
path-finding ×1
pdfsharp ×1
wpf ×1