Remarks
A biconnected component is a subgraph which is connected and non-separable, i.e. after removing one single node the component is still connected. Another way of looking at it is that every pair of nodes in a biconnected component has at least two different paths between them.
In a connected (sub)graph the biconnected components are attached to each other at shared nodes, the so-called articulation points. Articulation points represent nodes that, when removed, cause the whole connected component to break up into multiple connected components.
Other Graph Connectivity Algorithms
yFiles for HTML supports a number of other analysis algorithms that partition the graph into components, based on various criteria.
- ConnectedComponents – Determines components defined by the existence of an undirected path between nodes
- StronglyConnectedComponents – Determines components defined by the existence of a directed path between nodes
- Bipartition – Divides a graph into two partitions where all edges have their source and target in different partitions
- IndependentSets – Divides a graph into partitions where no nodes are connected within a partition
- KCoreComponents – Calculates the k-cores of an undirected input graph. The k-core of an undirected input graph consists of the subgraph components where each node has at least degree
k.
Complexity
Examples
// prepare the biconnected components algorithm
const algorithm = new BiconnectedComponents()
// run the algorithm
const result = algorithm.run(graph)
// highlight the edges of the biconnected components with different styles
for (const edge of graph.edges) {
const componentId = result.edgeComponentIds.get(edge)!
graph.setStyle(edge, componentStyles.get(componentId)!)
}See Also
Developer's Guide
API
- biconnectedComponents
Members
Constructors
Properties
Gets or sets the collection of edges which define a subset of the graph for the algorithms to work on.
If nothing is set, all edges of the graph will be processed.
If only the ItemCollection<TItem>.excludes are set, all edges in the graph except those provided in the ItemCollection<TItem>.excludes are processed.
Note that edges which start or end at nodes which are not in the subgraphNodes are automatically not considered by the algorithm.
ItemCollection<T> instances may be shared among algorithm instances and will be (re-)evaluated upon (re-)execution of the algorithm.
Examples
// configure the biconnected components algorithm
const algorithm = new BiconnectedComponents({
// Ignore edges without target arrow heads
subgraphEdges: {
excludes: (edge: IEdge): boolean =>
edge.style instanceof PolylineEdgeStyle &&
edge.style.targetArrow instanceof Arrow &&
edge.style.targetArrow.type === ArrowType.NONE,
},
})
// run the algorithm
const result = algorithm.run(graph)
// highlight the edges of the biconnected components with different styles
for (const edge of graph.edges) {
const componentId = result.edgeComponentIds.get(edge)!
graph.setStyle(edge, componentStyles.get(componentId)!)
}Gets or sets the collection of nodes which define a subset of the graph for the algorithms to work on.
If nothing is set, all nodes of the graph will be processed.
If only the ItemCollection<TItem>.excludes are set, all nodes in the graph except those provided in the ItemCollection<TItem>.excludes are processed.
ItemCollection<T> instances may be shared among algorithm instances and will be (re-)evaluated upon (re-)execution of the algorithm.
Examples
// configure the biconnected components algorithm
const algorithm = new BiconnectedComponents({
subgraphNodes: {
// only consider elliptical nodes in the graph
includes: (node: INode): boolean =>
node.style instanceof ShapeNodeStyle &&
node.style.shape === ShapeNodeShape.ELLIPSE,
// but ignore the first node, regardless of its shape
excludes: graph.nodes.first()!,
},
})
// run the algorithm
const result = algorithm.run(graph)
// highlight the edges of the biconnected components with different styles
for (const edge of graph.edges) {
const componentId = result.edgeComponentIds.get(edge)!
graph.setStyle(edge, componentStyles.get(componentId)!)
}Methods
Determines the biconnected components and articulation points of a given undirected graph.
Parameters
- graph: IGraph
- The input graph to run the algorithm on.
Return Value
- BiconnectedComponentsResult
- A BiconnectedComponentsResult containing the biconnected components and articulation points of
graph.
Throws
- Exception ({ name: 'InvalidOperationError' })
- If the algorithm can't create a valid result due to an invalid graph structure or wrongly configured properties.