Class UndirectedMultigraph<TVertex, TEdge>
- Namespace
- Graph1x
- Assembly
- Graph1x.dll
An undirected multigraph: parallel edges between the same endpoints and self-loops are all allowed, and endpoint order never matters. Backed by per-vertex incidence lists.
public class UndirectedMultigraph<TVertex, TEdge> : IMutableGraph<TVertex, TEdge>, IReadOnlyGraph<TVertex, TEdge> where TVertex : notnull where TEdge : IEdge<TVertex>
Type Parameters
TVertexThe vertex type.
TEdgeThe edge type.
- Inheritance
-
UndirectedMultigraph<TVertex, TEdge>
- Implements
-
IMutableGraph<TVertex, TEdge>IReadOnlyGraph<TVertex, TEdge>
- Inherited Members
- Extension Methods
Constructors
UndirectedMultigraph()
Initializes an empty multigraph using the default vertex comparer.
public UndirectedMultigraph()
UndirectedMultigraph(IEqualityComparer<TVertex>)
Initializes an empty multigraph using vertexComparer to identify vertices.
public UndirectedMultigraph(IEqualityComparer<TVertex> vertexComparer)
Parameters
vertexComparerIEqualityComparer<TVertex>The comparer used to identify vertices.
Exceptions
- ArgumentNullException
vertexCompareris null.
Properties
AllowsParallelEdges
Gets a value indicating whether the graph admits parallel edges between the same endpoints.
public bool AllowsParallelEdges { get; }
Property Value
EdgeCount
Gets the number of edges in the graph.
public int EdgeCount { get; }
Property Value
Edges
Gets the edges of the graph.
public IEnumerable<TEdge> Edges { get; }
Property Value
- IEnumerable<TEdge>
IsDirected
Gets a value indicating whether edges are directed.
public bool IsDirected { get; }
Property Value
VertexComparer
Gets the comparer used to identify vertices.
public IEqualityComparer<TVertex> VertexComparer { get; }
Property Value
- IEqualityComparer<TVertex>
VertexCount
Gets the number of vertices in the graph.
public int VertexCount { get; }
Property Value
Vertices
Gets the vertices of the graph.
public IEnumerable<TVertex> Vertices { get; }
Property Value
- IEnumerable<TVertex>
Methods
AddEdge(TEdge)
Adds edge to the graph, adding missing endpoint
vertices automatically.
public bool AddEdge(TEdge edge)
Parameters
edgeTEdgeThe edge to add.
Returns
AddVertex(TVertex)
Adds vertex to the graph.
public bool AddVertex(TVertex vertex)
Parameters
vertexTVertexThe vertex to add.
Returns
AdjacentEdges(TVertex)
Gets the edges incident to vertex. On directed graphs
this includes both incoming and outgoing edges.
public IEnumerable<TEdge> AdjacentEdges(TVertex vertex)
Parameters
vertexTVertexThe vertex whose incident edges to enumerate.
Returns
- IEnumerable<TEdge>
The incident edges.
Exceptions
- ArgumentException
The vertex is not in the graph.
Clear()
Removes every vertex and edge from the graph.
public void Clear()
ContainsEdge(TVertex, TVertex)
Determines whether the graph contains an edge between source
and target. On undirected graphs the endpoint order is irrelevant.
public bool ContainsEdge(TVertex source, TVertex target)
Parameters
sourceTVertexThe first endpoint.
targetTVertexThe second endpoint.
Returns
ContainsVertex(TVertex)
Determines whether the graph contains vertex.
public bool ContainsVertex(TVertex vertex)
Parameters
vertexTVertexThe vertex to look up.
Returns
Degree(TVertex)
Gets the degree of vertex. Self-loops count twice on
undirected graphs; on directed graphs the degree is in-degree plus out-degree.
public int Degree(TVertex vertex)
Parameters
vertexTVertexThe vertex to measure.
Returns
- int
The number of edge endpoints incident to the vertex.
Exceptions
- ArgumentException
The vertex is not in the graph.
GetEdges(TVertex, TVertex)
Gets every parallel edge between source and target, in either orientation.
public IEnumerable<TEdge> GetEdges(TVertex source, TVertex target)
Parameters
sourceTVertexOne endpoint.
targetTVertexThe other endpoint.
Returns
- IEnumerable<TEdge>
The matching edges, possibly empty.
Exceptions
- ArgumentException
sourceis not in the graph.
RemoveEdge(TVertex, TVertex)
Removes one edge between source and target, whatever its payload or orientation.
public bool RemoveEdge(TVertex source, TVertex target)
Parameters
sourceTVertexOne endpoint.
targetTVertexThe other endpoint.
Returns
RemoveEdge(TEdge)
Removes edge from the graph. Endpoint vertices stay.
public bool RemoveEdge(TEdge edge)
Parameters
edgeTEdgeThe edge to remove.
Returns
Remarks
The stored edge must equal edge under the edge
type's default equality — VertexComparer
locates the endpoints but never compares payloads. To remove an edge
by its endpoints alone, use the endpoint-based overloads on the
concrete graph types.
RemoveVertex(TVertex)
Removes vertex and every edge incident to it.
public bool RemoveVertex(TVertex vertex)
Parameters
vertexTVertexThe vertex to remove.