Creating Graphs - KeRNeLith/QuikGraph GitHub Wiki
QuikGraph provides several extension methods in QuikGraph.GraphExtensions
to create graph from list of edge or vertices. For example, from an IEnumerable<Edge<int>>
:
using QuikGraph; // enables extension methods
var edges = new[] { new Edge<int>(1, 2), new Edge<int>(0,1) };
var graph = edges.ToAdjacencyGraph<int, Edge<int>>();
Let us assume we need integer vertices and edges tagged with string. int
is the vertex type and we can use the TaggedEdge<TVertex, TTag>
generic type for the edge type:
-
TVertex
isint
-
TEdge
type usingTaggedEdge<Vertex, Marker>
:TaggedEdge<int, string>
var graph = new AdjacencyGraph<int, TaggedEdge<int, string>>();
You may have already a dictionary on hand that represents a graph, where the keys are the vertices and the value is a collection of out-edges (or adjacent edges). You can wrap this dictionary with QuikGraph without re-allocating new memory:
Dictionary<int, int[]> dictionary = ...; // Vertex -> Target edges
var graph = dictionary.ToDelegateVertexAndEdgeListGraph(
kv => Array.ConvertAll(kv.Value, v => new Edge<int>(kv.Key, v)));
// Without extension method
var graph = GraphExtensions.ToDelegateVertexAndEdgeListGraph(
dictionary,
kv => Array.ConvertAll(kv.Value, v => new Edge<int>(kv.Key, v)));
This snippet creates two vertices and adds them to the graph.
int vertex1 = 1;
int vertex2 = 2;
graph.AddVertex(vertex1);
graph.AddVertex(vertex2);
Adds an edge to the graph. Note that vertices vertex1
and vertex2
are already added to the graph beforehand.
var edge1 = new TaggedEdge<int, string>(vertex1, vertex2, "hello");
graph.AddEdge(edge1);
For more details about QuikGraph built-in edge objects you can consult the Edges page.
You can also add an edge and implicitly add the vertices if they are missing.
// vertex3, vertex4 are not added into the graph yet
var edge2 = new TaggedEdge<int, string>(vertex3, vertex4, "hello");
graph.AddVerticesAndEdge(edge2);
It is also possible to add a batch of vertices (same for edges) in one operation.
// Vertex range
graph.AddVertexRange(new[] { vertex5, vertex6 });
// Edge range
graph.AddEdgeRange(new[] { edge3, edge4 });
// Edge range (and implicitly vertices)
graph.AddVerticesAndEdgeRange(new[] { edge5, edge6 });