Class BidirectionalGraph<TVertex, TEdge>
Mutable directed graph data structure.
Implements
Inherited Members
Namespace: QuikGraph
Assembly: QuikGraph.dll
Syntax
[Serializable]
public class BidirectionalGraph<TVertex, TEdge> : IEdgeListAndIncidenceGraph<TVertex, TEdge>, IMutableBidirectionalGraph<TVertex, TEdge>, IMutableVertexAndEdgeListGraph<TVertex, TEdge>, IMutableVertexListGraph<TVertex, TEdge>, IMutableIncidenceGraph<TVertex, TEdge>, IMutableVertexAndEdgeSet<TVertex, TEdge>, IMutableVertexSet<TVertex>, IMutableEdgeListGraph<TVertex, TEdge>, IMutableGraph<TVertex, TEdge>, IBidirectionalGraph<TVertex, TEdge>, IVertexAndEdgeListGraph<TVertex, TEdge>, IVertexListGraph<TVertex, TEdge>, IEdgeListGraph<TVertex, TEdge>, IEdgeSet<TVertex, TEdge>, IVertexSet<TVertex>, IBidirectionalIncidenceGraph<TVertex, TEdge>, IIncidenceGraph<TVertex, TEdge>, IImplicitGraph<TVertex, TEdge>, IGraph<TVertex, TEdge>, IImplicitVertexSet<TVertex>, ICloneable where TEdge : IEdge<TVertex>
Type Parameters
| Name | Description |
|---|---|
| TVertex | Vertex type. |
| TEdge | Edge type |
Remarks
It is efficient for sparse graph representation where out-edge and in-edges need to be enumerated. Requires twice as much memory as the AdjacencyGraph<TVertex, TEdge>.
Constructors
| Improve this Doc View SourceBidirectionalGraph()
Initializes a new instance of the BidirectionalGraph<TVertex, TEdge> class.
Declaration
public BidirectionalGraph()
BidirectionalGraph(BidirectionalGraph<TVertex, TEdge>)
Copy constructor that creates sufficiently deep copy of the graph.
Declaration
public BidirectionalGraph(BidirectionalGraph<TVertex, TEdge> other)
Parameters
| Type | Name | Description |
|---|---|---|
| BidirectionalGraph<TVertex, TEdge> | other | Graph to copy. |
BidirectionalGraph(Boolean)
Initializes a new instance of the BidirectionalGraph<TVertex, TEdge> class.
Declaration
public BidirectionalGraph(bool allowParallelEdges)
Parameters
| Type | Name | Description |
|---|---|---|
| System.Boolean | allowParallelEdges | Indicates if parallel edges are allowed. |
BidirectionalGraph(Boolean, Int32)
Initializes a new instance of the BidirectionalGraph<TVertex, TEdge> class.
Declaration
public BidirectionalGraph(bool allowParallelEdges, int capacity)
Parameters
| Type | Name | Description |
|---|---|---|
| System.Boolean | allowParallelEdges | Indicates if parallel edges are allowed. |
| System.Int32 | capacity | Vertex capacity. |
BidirectionalGraph(Boolean, Int32, Int32)
Initializes a new instance of the BidirectionalGraph<TVertex, TEdge> class.
Declaration
public BidirectionalGraph(bool allowParallelEdges, int vertexCapacity, int edgeCapacity)
Parameters
| Type | Name | Description |
|---|---|---|
| System.Boolean | allowParallelEdges | Indicates if parallel edges are allowed. |
| System.Int32 | vertexCapacity | Vertex capacity. |
| System.Int32 | edgeCapacity | Edge capacity. |
Properties
| Improve this Doc View SourceAllowParallelEdges
Gets a value indicating if the graph allows parallel edges
Declaration
public bool AllowParallelEdges { get; }
Property Value
| Type | Description |
|---|---|
| System.Boolean |
EdgeCapacity
Gets or sets the edge capacity.
Declaration
public int EdgeCapacity { get; set; }
Property Value
| Type | Description |
|---|---|
| System.Int32 |
EdgeCount
Gets the edge count.
Declaration
public int EdgeCount { get; }
Property Value
| Type | Description |
|---|---|
| System.Int32 |
Edges
Gets the edges.
Declaration
public virtual IEnumerable<TEdge> Edges { get; }
Property Value
| Type | Description |
|---|---|
| System.Collections.Generic.IEnumerable<TEdge> |
EdgeType
Gives the type of edges.
Declaration
public Type EdgeType { get; }
Property Value
| Type | Description |
|---|---|
| System.Type |
IsDirected
Gets a value indicating if the graph is directed
Declaration
public bool IsDirected { get; }
Property Value
| Type | Description |
|---|---|
| System.Boolean |
IsEdgesEmpty
Gets a value indicating whether there are no edges in this set. It is true if this edge set is empty, otherwise false.
Declaration
public bool IsEdgesEmpty { get; }
Property Value
| Type | Description |
|---|---|
| System.Boolean |
IsVerticesEmpty
Gets a value indicating whether there are no vertices in this set. It is true if this vertex set is empty, otherwise false.
Declaration
public bool IsVerticesEmpty { get; }
Property Value
| Type | Description |
|---|---|
| System.Boolean |
VertexCount
Gets the vertex count.
Declaration
public int VertexCount { get; }
Property Value
| Type | Description |
|---|---|
| System.Int32 |
VertexType
Gets the type of vertices.
Declaration
public Type VertexType { get; }
Property Value
| Type | Description |
|---|---|
| System.Type |
Vertices
Gets the vertices.
Declaration
public virtual IEnumerable<TVertex> Vertices { get; }
Property Value
| Type | Description |
|---|---|
| System.Collections.Generic.IEnumerable<TVertex> |
Methods
| Improve this Doc View SourceAddEdge(TEdge)
Adds the edge to this graph.
Declaration
public virtual bool AddEdge(TEdge edge)
Parameters
| Type | Name | Description |
|---|---|---|
| TEdge | edge | An edge. |
Returns
| Type | Description |
|---|---|
| System.Boolean | True if the edge was added, false otherwise. |
Exceptions
| Type | Condition |
|---|---|
| System.ArgumentNullException |
|
AddEdgeRange(IEnumerable<TEdge>)
Adds a set of edges to this graph.
Declaration
public int AddEdgeRange(IEnumerable<TEdge> edges)
Parameters
| Type | Name | Description |
|---|---|---|
| System.Collections.Generic.IEnumerable<TEdge> | edges | Edges to add. |
Returns
| Type | Description |
|---|---|
| System.Int32 | The number of edges successfully added to this graph. |
Exceptions
| Type | Condition |
|---|---|
| System.ArgumentNullException |
|
AddVertex(TVertex)
Adds a vertex to this set.
Declaration
public virtual bool AddVertex(TVertex vertex)
Parameters
| Type | Name | Description |
|---|---|---|
| TVertex | vertex | Vertex to add. |
Returns
| Type | Description |
|---|---|
| System.Boolean | True if the vertex was added, false otherwise. |
Exceptions
| Type | Condition |
|---|---|
| System.ArgumentNullException |
|
AddVertexRange(IEnumerable<TVertex>)
Adds given vertices to this set.
Declaration
public virtual int AddVertexRange(IEnumerable<TVertex> vertices)
Parameters
| Type | Name | Description |
|---|---|---|
| System.Collections.Generic.IEnumerable<TVertex> | vertices | Vertices to add. |
Returns
| Type | Description |
|---|---|
| System.Int32 | The number of vertex added. |
Exceptions
| Type | Condition |
|---|---|
| System.ArgumentNullException |
|
AddVerticesAndEdge(TEdge)
Adds edge and its vertices to this graph.
Declaration
public virtual bool AddVerticesAndEdge(TEdge edge)
Parameters
| Type | Name | Description |
|---|---|---|
| TEdge | edge | The edge to add. |
Returns
| Type | Description |
|---|---|
| System.Boolean | True if the edge was added, false otherwise. |
Exceptions
| Type | Condition |
|---|---|
| System.ArgumentNullException |
|
AddVerticesAndEdgeRange(IEnumerable<TEdge>)
Adds a set of edges (and it's vertices if necessary).
Declaration
public int AddVerticesAndEdgeRange(IEnumerable<TEdge> edges)
Parameters
| Type | Name | Description |
|---|---|---|
| System.Collections.Generic.IEnumerable<TEdge> | edges | Edges to add. |
Returns
| Type | Description |
|---|---|
| System.Int32 | The number of edges added. |
Exceptions
| Type | Condition |
|---|---|
| System.ArgumentNullException |
|
Clear()
Clears the vertex and edges.
Declaration
public void Clear()
ClearEdges(TVertex)
Clears in-edges and out-edges of the given vertex.
Declaration
public void ClearEdges(TVertex vertex)
Parameters
| Type | Name | Description |
|---|---|---|
| TVertex | vertex | The vertex. |
Exceptions
| Type | Condition |
|---|---|
| System.ArgumentNullException |
|
ClearInEdges(TVertex)
Clears in-edges of the given vertex.
Declaration
public void ClearInEdges(TVertex vertex)
Parameters
| Type | Name | Description |
|---|---|---|
| TVertex | vertex | The vertex. |
Exceptions
| Type | Condition |
|---|---|
| System.ArgumentNullException |
|
ClearOutEdges(TVertex)
Trims the out-edges of the given vertex
Declaration
public void ClearOutEdges(TVertex vertex)
Parameters
| Type | Name | Description |
|---|---|---|
| TVertex | vertex | The vertex. |
Exceptions
| Type | Condition |
|---|---|
| System.ArgumentNullException |
|
Clone()
Clones this graph.
Declaration
public BidirectionalGraph<TVertex, TEdge> Clone()
Returns
| Type | Description |
|---|---|
| BidirectionalGraph<TVertex, TEdge> | Cloned graph. |
ContainsEdge(TVertex, TVertex)
Checks if this graph contains an edge that link
source and target vertices.
Declaration
public bool ContainsEdge(TVertex source, TVertex target)
Parameters
| Type | Name | Description |
|---|---|---|
| TVertex | source | Source vertex. |
| TVertex | target | Target vertex. |
Returns
| Type | Description |
|---|---|
| System.Boolean | True if an edge exists, false otherwise. |
Exceptions
| Type | Condition |
|---|---|
| System.ArgumentNullException |
|
| System.ArgumentNullException |
|
ContainsEdge(TEdge)
Determines whether this set contains the specified edge.
Declaration
public bool ContainsEdge(TEdge edge)
Parameters
| Type | Name | Description |
|---|---|---|
| TEdge | edge | Edge to check. |
Returns
| Type | Description |
|---|---|
| System.Boolean | True if the specified |
Exceptions
| Type | Condition |
|---|---|
| System.ArgumentNullException |
|
ContainsVertex(TVertex)
Determines whether this set contains the specified vertex.
Declaration
public bool ContainsVertex(TVertex vertex)
Parameters
| Type | Name | Description |
|---|---|---|
| TVertex | vertex | Vertex to check. |
Returns
| Type | Description |
|---|---|
| System.Boolean | True if the specified |
Exceptions
| Type | Condition |
|---|---|
| System.ArgumentNullException |
|
Degree(TVertex)
Gets the degree of vertex, i.e.
the sum of the out-degree and in-degree of vertex.
Declaration
public int Degree(TVertex vertex)
Parameters
| Type | Name | Description |
|---|---|---|
| TVertex | vertex | The vertex. |
Returns
| Type | Description |
|---|---|
| System.Int32 | The sum of OutDegree and InDegree of |
Exceptions
| Type | Condition |
|---|---|
| System.ArgumentNullException |
|
| VertexNotFoundException |
|
InDegree(TVertex)
Gets the number of in-edges of vertex.
Declaration
public int InDegree(TVertex vertex)
Parameters
| Type | Name | Description |
|---|---|---|
| TVertex | vertex | The vertex. |
Returns
| Type | Description |
|---|---|
| System.Int32 | The number of in-edges pointing towards |
Exceptions
| Type | Condition |
|---|---|
| System.ArgumentNullException |
|
| VertexNotFoundException |
|
InEdge(TVertex, Int32)
Gets the in-edge at location index.
Declaration
public TEdge InEdge(TVertex vertex, int index)
Parameters
| Type | Name | Description |
|---|---|---|
| TVertex | vertex | The vertex. |
| System.Int32 | index | The index. |
Returns
| Type | Description |
|---|---|
| TEdge | The in-edge at position |
Exceptions
| Type | Condition |
|---|---|
| System.ArgumentNullException |
|
| System.ArgumentOutOfRangeException | No vertex at |
| VertexNotFoundException |
|
InEdges(TVertex)
Gets the collection of in-edges of vertex.
Declaration
public IEnumerable<TEdge> InEdges(TVertex vertex)
Parameters
| Type | Name | Description |
|---|---|---|
| TVertex | vertex | The vertex. |
Returns
| Type | Description |
|---|---|
| System.Collections.Generic.IEnumerable<TEdge> | The collection of in-edges of |
Exceptions
| Type | Condition |
|---|---|
| System.ArgumentNullException |
|
| VertexNotFoundException |
|
IsInEdgesEmpty(TVertex)
Determines whether vertex has no in-edges.
Declaration
public bool IsInEdgesEmpty(TVertex vertex)
Parameters
| Type | Name | Description |
|---|---|---|
| TVertex | vertex | The vertex. |
Returns
| Type | Description |
|---|---|
| System.Boolean | True if |
Exceptions
| Type | Condition |
|---|---|
| System.ArgumentNullException |
|
| VertexNotFoundException |
|
IsOutEdgesEmpty(TVertex)
Determines whether there are out-edges associated to vertex.
Declaration
public bool IsOutEdgesEmpty(TVertex vertex)
Parameters
| Type | Name | Description |
|---|---|---|
| TVertex | vertex | The vertex. |
Returns
| Type | Description |
|---|---|
| System.Boolean | True if |
Exceptions
| Type | Condition |
|---|---|
| System.ArgumentNullException |
|
| VertexNotFoundException |
|
MergeVertex(TVertex, EdgeFactory<TVertex, TEdge>)
Removes the given vertex and merges all its connection to other vertices.
Declaration
public void MergeVertex(TVertex vertex, EdgeFactory<TVertex, TEdge> edgeFactory)
Parameters
| Type | Name | Description |
|---|---|---|
| TVertex | vertex | The vertex. |
| EdgeFactory<TVertex, TEdge> | edgeFactory | Factory method to create an edge. |
Exceptions
| Type | Condition |
|---|---|
| System.ArgumentNullException |
|
| System.ArgumentNullException |
|
| VertexNotFoundException |
|
MergeVerticesIf(VertexPredicate<TVertex>, EdgeFactory<TVertex, TEdge>)
Removes vertices matching the given vertexPredicate and merges all their
connections to other vertices.
Declaration
public void MergeVerticesIf(VertexPredicate<TVertex> vertexPredicate, EdgeFactory<TVertex, TEdge> edgeFactory)
Parameters
| Type | Name | Description |
|---|---|---|
| VertexPredicate<TVertex> | vertexPredicate | Predicate to match vertices. |
| EdgeFactory<TVertex, TEdge> | edgeFactory | Factory method to create an edge. |
Exceptions
| Type | Condition |
|---|---|
| System.ArgumentNullException |
|
| System.ArgumentNullException |
|
OnEdgeAdded(TEdge)
Called on each added edge.
Declaration
protected virtual void OnEdgeAdded(TEdge edge)
Parameters
| Type | Name | Description |
|---|---|---|
| TEdge | edge | Added edge. |
OnEdgeRemoved(TEdge)
Called on each removed edge.
Declaration
protected virtual void OnEdgeRemoved(TEdge edge)
Parameters
| Type | Name | Description |
|---|---|---|
| TEdge | edge | Removed edge. |
OnVertexAdded(TVertex)
Called on each added vertex.
Declaration
protected virtual void OnVertexAdded(TVertex vertex)
Parameters
| Type | Name | Description |
|---|---|---|
| TVertex | vertex | Added vertex. |
OnVertexRemoved(TVertex)
Called for each removed vertex.
Declaration
protected virtual void OnVertexRemoved(TVertex vertex)
Parameters
| Type | Name | Description |
|---|---|---|
| TVertex | vertex | Removed vertex. |
OutDegree(TVertex)
Gets the count of out-edges of vertex.
Declaration
public int OutDegree(TVertex vertex)
Parameters
| Type | Name | Description |
|---|---|---|
| TVertex | vertex | The vertex. |
Returns
| Type | Description |
|---|---|
| System.Int32 | The count of out-edges of |
Exceptions
| Type | Condition |
|---|---|
| System.ArgumentNullException |
|
| VertexNotFoundException |
|
OutEdge(TVertex, Int32)
Gets the out-edge of vertex at position index.
Declaration
public TEdge OutEdge(TVertex vertex, int index)
Parameters
| Type | Name | Description |
|---|---|---|
| TVertex | vertex | The vertex. |
| System.Int32 | index | The index. |
Returns
| Type | Description |
|---|---|
| TEdge | The out-edge at position |
Exceptions
| Type | Condition |
|---|---|
| System.ArgumentNullException |
|
| System.ArgumentOutOfRangeException | No vertex at |
| VertexNotFoundException |
|
OutEdges(TVertex)
Gets the out-edges of vertex.
Declaration
public IEnumerable<TEdge> OutEdges(TVertex vertex)
Parameters
| Type | Name | Description |
|---|---|---|
| TVertex | vertex | The vertex. |
Returns
| Type | Description |
|---|---|
| System.Collections.Generic.IEnumerable<TEdge> | An enumeration of the out-edges of |
Exceptions
| Type | Condition |
|---|---|
| System.ArgumentNullException |
|
| VertexNotFoundException |
|
RemoveEdge(TEdge)
Removes the edge from this graph.
Declaration
public virtual bool RemoveEdge(TEdge edge)
Parameters
| Type | Name | Description |
|---|---|---|
| TEdge | edge | Edge to remove. |
Returns
| Type | Description |
|---|---|
| System.Boolean | True if the |
Exceptions
| Type | Condition |
|---|---|
| System.ArgumentNullException |
|
RemoveEdgeIf(EdgePredicate<TVertex, TEdge>)
Removes all edges that match the given predicate.
Declaration
public int RemoveEdgeIf(EdgePredicate<TVertex, TEdge> predicate)
Parameters
| Type | Name | Description |
|---|---|---|
| EdgePredicate<TVertex, TEdge> | predicate | Predicate to check if an edge should be removed. |
Returns
| Type | Description |
|---|---|
| System.Int32 | The number of edges removed. |
Exceptions
| Type | Condition |
|---|---|
| System.ArgumentNullException |
|
RemoveInEdgeIf(TVertex, EdgePredicate<TVertex, TEdge>)
Removes in-edges of the given vertex that match
predicate predicate.
Declaration
public int RemoveInEdgeIf(TVertex vertex, EdgePredicate<TVertex, TEdge> predicate)
Parameters
| Type | Name | Description |
|---|---|---|
| TVertex | vertex | The vertex. |
| EdgePredicate<TVertex, TEdge> | predicate | Edge predicate. |
Returns
| Type | Description |
|---|---|
| System.Int32 | Number of edges removed. |
Exceptions
| Type | Condition |
|---|---|
| System.ArgumentNullException |
|
| System.ArgumentNullException |
|
RemoveOutEdgeIf(TVertex, EdgePredicate<TVertex, TEdge>)
Removes all out-edges of the vertex
where the predicate is evaluated to true.
Declaration
public int RemoveOutEdgeIf(TVertex vertex, EdgePredicate<TVertex, TEdge> predicate)
Parameters
| Type | Name | Description |
|---|---|---|
| TVertex | vertex | The vertex. |
| EdgePredicate<TVertex, TEdge> | predicate | Predicate to remove edges. |
Returns
| Type | Description |
|---|---|
| System.Int32 | The number of removed edges. |
Exceptions
| Type | Condition |
|---|---|
| System.ArgumentNullException |
|
| System.ArgumentNullException |
|
RemoveVertex(TVertex)
Removes the given vertex from this set.
Declaration
public virtual bool RemoveVertex(TVertex vertex)
Parameters
| Type | Name | Description |
|---|---|---|
| TVertex | vertex | Vertex to remove. |
Returns
| Type | Description |
|---|---|
| System.Boolean | True if the vertex was removed, false otherwise. |
Exceptions
| Type | Condition |
|---|---|
| System.ArgumentNullException |
|
RemoveVertexIf(VertexPredicate<TVertex>)
Removes all vertices matching the given predicate.
Declaration
public int RemoveVertexIf(VertexPredicate<TVertex> predicate)
Parameters
| Type | Name | Description |
|---|---|---|
| VertexPredicate<TVertex> | predicate | Predicate to check on each vertex. |
Returns
| Type | Description |
|---|---|
| System.Int32 | The number of vertex removed. |
Exceptions
| Type | Condition |
|---|---|
| System.ArgumentNullException |
|
TrimEdgeExcess()
Trims excess storage allocated for edges.
Declaration
public void TrimEdgeExcess()
TryGetEdge(TVertex, TVertex, out TEdge)
Tries to get the edge that link
source and target vertices.
Declaration
public bool TryGetEdge(TVertex source, TVertex target, out TEdge edge)
Parameters
| Type | Name | Description |
|---|---|---|
| TVertex | source | Source vertex. |
| TVertex | target | Target vertex. |
| TEdge | edge | Edge found, otherwise null. |
Returns
| Type | Description |
|---|---|
| System.Boolean | True if an edge was found, false otherwise. |
Exceptions
| Type | Condition |
|---|---|
| System.ArgumentNullException |
|
| System.ArgumentNullException |
|
TryGetEdges(TVertex, TVertex, out IEnumerable<TEdge>)
Tries to get edges that link
source and target vertices.
Declaration
public bool TryGetEdges(TVertex source, TVertex target, out IEnumerable<TEdge> edges)
Parameters
| Type | Name | Description |
|---|---|---|
| TVertex | source | Source vertex. |
| TVertex | target | Target vertex. |
| System.Collections.Generic.IEnumerable<TEdge> | edges | Edges found, otherwise null. |
Returns
| Type | Description |
|---|---|
| System.Boolean | True if at least an edge was found, false otherwise. |
Exceptions
| Type | Condition |
|---|---|
| System.ArgumentNullException |
|
| System.ArgumentNullException |
|
TryGetInEdges(TVertex, out IEnumerable<TEdge>)
Tries to get the in-edges of vertex.
Declaration
public bool TryGetInEdges(TVertex vertex, out IEnumerable<TEdge> edges)
Parameters
| Type | Name | Description |
|---|---|---|
| TVertex | vertex | The vertex. |
| System.Collections.Generic.IEnumerable<TEdge> | edges | In-edges. |
Returns
| Type | Description |
|---|---|
| System.Boolean | True if |
Exceptions
| Type | Condition |
|---|---|
| System.ArgumentNullException |
|
TryGetOutEdges(TVertex, out IEnumerable<TEdge>)
Tries to get the out-edges of vertex.
Declaration
public bool TryGetOutEdges(TVertex vertex, out IEnumerable<TEdge> edges)
Parameters
| Type | Name | Description |
|---|---|---|
| TVertex | vertex | The vertex. |
| System.Collections.Generic.IEnumerable<TEdge> | edges | Out-edges. |
Returns
| Type | Description |
|---|---|
| System.Boolean | True if |
Exceptions
| Type | Condition |
|---|---|
| System.ArgumentNullException |
|
Events
| Improve this Doc View SourceEdgeAdded
Fired when an edge is added to this graph.
Declaration
public event EdgeAction<TVertex, TEdge> EdgeAdded
Event Type
| Type | Description |
|---|---|
| EdgeAction<TVertex, TEdge> |
EdgeRemoved
Fired when an edge has been removed from this graph.
Declaration
public event EdgeAction<TVertex, TEdge> EdgeRemoved
Event Type
| Type | Description |
|---|---|
| EdgeAction<TVertex, TEdge> |
VertexAdded
Fired when a vertex is added to this set.
Declaration
public event VertexAction<TVertex> VertexAdded
Event Type
| Type | Description |
|---|---|
| VertexAction<TVertex> |
VertexRemoved
Fired when a vertex is removed from this set.
Declaration
public event VertexAction<TVertex> VertexRemoved
Event Type
| Type | Description |
|---|---|
| VertexAction<TVertex> |
Explicit Interface Implementations
| Improve this Doc View SourceICloneable.Clone()
Declaration
object ICloneable.Clone()
Returns
| Type | Description |
|---|---|
| System.Object |