我是图论的新手。
我已经使用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)
输出undirGraph.Edges
:
val it : Collections.Generic.IEnumerable<Edge<Vertex>> =
seq
[FSI_0227+Vertex->FSI_0227+Vertex {Source = {decimal = 1M;};
Target = {decimal = 1M;};};
FSI_0227+Vertex->FSI_0227+Vertex {Source = {decimal = 2M;};
Target = {decimal = 18M;};};
FSI_0227+Vertex->FSI_0227+Vertex {Source = {decimal = 3M;};
Target = {decimal = 3M;};};
FSI_0227+Vertex->FSI_0227+Vertex {Source = {decimal = 4M;};
Target = {decimal = 5M;};}; ...]
并从undirGraph.Vertices
:
val it : Collections.Generic.IEnumerable<Vertex> =
seq
[{decimal = 1M;}; {decimal = 2M;}; {decimal = 18M;}; {decimal = 3M;}; ...]
符合预期。
无向图创建成功,但现在我卡住了。从这里开始,我不知道如何获取图形的连通分量,或者坦率地说,我是否使用正确的图形结构。
我本来希望x
在图中包含组件,但x;;
FSI 中的输出如下所示:
示例中的值tuple list
表示数据库中BillTo
的ShipTo
客户 ID 值。
QuickGraph 库中的文档很少,特别是对于那些试图“即时学习”的人。
这个问题取代了我之前发布的问题。我曾考虑修改我之前的问题,但由于这是一个完全独立的问题,因此决定保留原样。