UndirectedGraph
data-structure-typed / UndirectedGraph
Class: UndirectedGraph<V, E, VO, EO>
Defined in: data-structures/graph/undirected-graph.ts:138
Undirected graph implementation.
Remarks
Time O(1), Space O(1)
Examples
// basic UndirectedGraph vertex and edge creation
// Create a simple undirected graph
const graph = new UndirectedGraph<string>();
// Add vertices
graph.addVertex('A');
graph.addVertex('B');
graph.addVertex('C');
graph.addVertex('D');
// Verify vertices exist
console.log(graph.hasVertex('A')); // true;
console.log(graph.hasVertex('B')); // true;
console.log(graph.hasVertex('E')); // false;
// Check vertex count
console.log(graph.size); // 4;
// UndirectedGraph edge operations (bidirectional)
const graph = new UndirectedGraph<string>();
// Add vertices
graph.addVertex('A');
graph.addVertex('B');
graph.addVertex('C');
// Add undirected edges (both directions automatically)
graph.addEdge('A', 'B', 1);
graph.addEdge('B', 'C', 2);
graph.addEdge('A', 'C', 3);
// Verify edges exist in both directions
console.log(graph.hasEdge('A', 'B')); // true;
console.log(graph.hasEdge('B', 'A')); // true; // Bidirectional!
console.log(graph.hasEdge('C', 'B')); // true;
console.log(graph.hasEdge('B', 'C')); // true; // Bidirectional!
// Get neighbors of A
const neighborsA = graph.getNeighbors('A');
console.log(neighborsA[0].key); // 'B';
console.log(neighborsA[1].key); // 'C';
// UndirectedGraph for social network connectivity analysis
interface Person {
id: number;
name: string;
location: string;
}
// UndirectedGraph is perfect for modeling symmetric relationships
// (friendships, collaborations, partnerships)
const socialNetwork = new UndirectedGraph<number, Person>();
// Add people as vertices
const people: [number, Person][] = [
[1, { id: 1, name: 'Alice', location: 'New York' }],
[2, { id: 2, name: 'Bob', location: 'San Francisco' }],
[3, { id: 3, name: 'Charlie', location: 'Boston' }],
[4, { id: 4, name: 'Diana', location: 'New York' }],
[5, { id: 5, name: 'Eve', location: 'Seattle' }]
];
for (const [id] of people) {
socialNetwork.addVertex(id);
}
// Add friendships (automatically bidirectional)
socialNetwork.addEdge(1, 2, 1); // Alice <-> Bob
socialNetwork.addEdge(1, 3, 1); // Alice <-> Charlie
socialNetwork.addEdge(2, 4, 1); // Bob <-> Diana
socialNetwork.addEdge(3, 5, 1); // Charlie <-> Eve
socialNetwork.addEdge(4, 5, 1); // Diana <-> Eve
console.log(socialNetwork.size); // 5;
// Find direct connections for Alice
const aliceConnections = socialNetwork.getNeighbors(1);
console.log(aliceConnections[0].key); // 2;
console.log(aliceConnections[1].key); // 3;
console.log(aliceConnections.length); // 2;
// Verify bidirectional connections
console.log(socialNetwork.hasEdge(1, 2)); // true;
console.log(socialNetwork.hasEdge(2, 1)); // true; // Friendship works both ways!
// Remove a person from network
socialNetwork.deleteVertex(2); // Bob leaves
console.log(socialNetwork.hasVertex(2)); // false;
console.log(socialNetwork.size); // 4;
// Alice loses Bob as a friend
const updatedAliceConnections = socialNetwork.getNeighbors(1);
console.log(updatedAliceConnections[0].key); // 3;
console.log(updatedAliceConnections[1]); // undefined;
// Diana loses Bob as a friend
const dianaConnections = socialNetwork.getNeighbors(4);
console.log(dianaConnections[0].key); // 5;
console.log(dianaConnections[1]); // undefined;
Extends
AbstractGraph<V,E,VO,EO>
Type Parameters
V
V = any
Vertex value type.
E
E = any
Edge value type.
VO
VO extends UndirectedVertex<V> = UndirectedVertex<V>
Concrete vertex class (extends AbstractVertex
EO
EO extends UndirectedEdge<E> = UndirectedEdge<E>
Concrete edge class (extends AbstractEdge
Implements
IGraph<V,E,VO,EO>
Constructors
Constructor
new UndirectedGraph<V, E, VO, EO>(options?): UndirectedGraph<V, E, VO, EO>;
Defined in: data-structures/graph/undirected-graph.ts:152
Construct an undirected graph with runtime defaults.
Parameters
options?
Partial<GraphOptions<V>>
GraphOptions<V> (e.g. vertexValueInitializer, defaultEdgeWeight).
Returns
UndirectedGraph<V, E, VO, EO>
Remarks
Time O(1), Space O(1)
Overrides
Accessors
size
Get Signature
get size(): number;
Defined in: data-structures/graph/abstract-graph.ts:89
Total number of entries.
Remarks
Time O(1), Space O(1)
Returns
number
Entry count.
Inherited from
Methods
[iterator]()
iterator: IterableIterator<[VertexKey, V | undefined]>;
Defined in: data-structures/base/iterable-entry-base.ts:22
Default iterator yielding [key, value] entries.
Parameters
args
...unknown[]
Returns
IterableIterator<[VertexKey, V | undefined]>
Iterator of [K, V].
Remarks
Time O(n) to iterate, Space O(1)
Inherited from
addEdge()
Add an edge by instance or by (src, dest, weight?, value?).
Param
Edge instance or source vertex/key.
Param
Destination vertex/key (when adding by pair).
Param
Edge weight.
Param
Edge payload.
Remarks
Time O(1) avg, Space O(1)
Call Signature
addEdge(edge): boolean;
Defined in: data-structures/graph/abstract-graph.ts:254
Parameters
edge
EO
Returns
boolean
Inherited from
Call Signature
addEdge(
src,
dest,
weight?,
value?): boolean;
Defined in: data-structures/graph/abstract-graph.ts:256
Parameters
src
VertexKey | VO
dest
VertexKey | VO
weight?
number
value?
E
Returns
boolean
Inherited from
addVertex()
Add a vertex by key/value or by pre-built vertex.
Param
Vertex key or existing vertex instance.
Param
Optional payload.
Remarks
Time O(1) avg, Space O(1)
Call Signature
addVertex(vertex): boolean;
Defined in: data-structures/graph/abstract-graph.ts:189
Parameters
vertex
VO
Returns
boolean
Implementation of
IGraph.addVertex
Inherited from
Call Signature
addVertex(key, value?): boolean;
Defined in: data-structures/graph/abstract-graph.ts:191
Parameters
key
VertexKey
value?
V
Returns
boolean
Implementation of
IGraph.addVertex
Inherited from
bellmanFord()
bellmanFord(
src,
scanNegativeCycle?,
getMin?,
genPath?): object;
Defined in: data-structures/graph/abstract-graph.ts:705
Bellman-Ford single-source shortest paths with option to scan negative cycles.
Parameters
src
VertexKey | VO
Source vertex or key.
scanNegativeCycle?
boolean
If true, also detect negative cycles.
getMin?
boolean
If true, compute global minimum distance.
genPath?
boolean
If true, generate path arrays via predecessor map.
Returns
object
Result bag including distances, predecessors, and optional cycle flag.
distMap
distMap: Map<VO, number>;
hasNegativeCycle
hasNegativeCycle: boolean | undefined;
min
min: number;
minPath
minPath: VO[];
paths
paths: VO[][];
preMap
preMap: Map<VO, VO>;
Remarks
Time O(V * E), Space O(V + E)
Inherited from
clear()
clear(): void;
Defined in: data-structures/graph/undirected-graph.ts:677
Remove all vertices and edges.
Returns
void
Remarks
Time O(V + E), Space O(1)
Implementation of
IGraph.clear
Overrides
clone()
clone(): this;
Defined in: data-structures/graph/undirected-graph.ts:687
Deep clone as the same concrete class.
Returns
this
A new graph of the same concrete class (this type).
Remarks
Time O(V + E), Space O(V + E)
Implementation of
IGraph.clone
Overrides
createEdge()
createEdge(
v1,
v2,
weight?,
value?): EO;
Defined in: data-structures/graph/undirected-graph.ts:219
Create an undirected edge instance. Does not insert into the graph.
Parameters
v1
VertexKey
One endpoint key.
v2
VertexKey
The other endpoint key.
weight?
number
Edge weight; defaults to defaultEdgeWeight.
value?
EO["value"]
Edge payload.
Returns
EO
Concrete edge instance.
Remarks
Time O(1), Space O(1)
Implementation of
IGraph.createEdge
Overrides
createVertex()
createVertex(key, value?): VO;
Defined in: data-structures/graph/undirected-graph.ts:206
Create an undirected vertex instance. Does not insert into the graph.
Parameters
key
VertexKey
Vertex identifier.
value?
VO["value"]
Optional payload.
Returns
VO
Concrete vertex instance.
Remarks
Time O(1), Space O(1)
Implementation of
IGraph.createVertex
Overrides
degreeOf()
degreeOf(vertexOrKey): number;
Defined in: data-structures/graph/undirected-graph.ts:485
Degree of a vertex (# of incident undirected edges).
Parameters
vertexOrKey
VertexKey | VO
Vertex or key.
Returns
number
Non-negative integer.
Remarks
Time O(1) avg, Space O(1)
Implementation of
IGraph.degreeOf
Overrides
deleteEdge()
deleteEdge(edgeOrOneSideVertexKey, otherSideVertexKey?): EO | undefined;
Defined in: data-structures/graph/undirected-graph.ts:378
Delete an edge by instance or by a pair of keys.
Parameters
edgeOrOneSideVertexKey
VertexKey | EO
Edge instance or one endpoint vertex/key.
otherSideVertexKey?
VertexKey
Required second endpoint when deleting by pair.
Returns
EO | undefined
Removed edge or undefined.
Remarks
Time O(1) avg, Space O(1)
Example
// UndirectedGraph deleteEdge and vertex operations
const graph = new UndirectedGraph<string>();
// Build a simple undirected graph
graph.addVertex('X');
graph.addVertex('Y');
graph.addVertex('Z');
graph.addEdge('X', 'Y', 1);
graph.addEdge('Y', 'Z', 2);
graph.addEdge('X', 'Z', 3);
// Delete an edge
graph.deleteEdge('X', 'Y');
console.log(graph.hasEdge('X', 'Y')); // false;
// Bidirectional deletion confirmed
console.log(graph.hasEdge('Y', 'X')); // false;
// Other edges should remain
console.log(graph.hasEdge('Y', 'Z')); // true;
console.log(graph.hasEdge('Z', 'Y')); // true;
// Delete a vertex
graph.deleteVertex('Y');
console.log(graph.hasVertex('Y')); // false;
console.log(graph.size); // 2;
Implementation of
IGraph.deleteEdge
Overrides
deleteEdgeBetween()
deleteEdgeBetween(v1, v2): EO | undefined;
Defined in: data-structures/graph/undirected-graph.ts:290
Delete a single undirected edge between two vertices.
Parameters
v1
VertexKey | VO
One vertex or key.
v2
VertexKey | VO
The other vertex or key.
Returns
EO | undefined
Removed edge or undefined.
Remarks
Time O(1) avg, Space O(1)
deleteVertex()
deleteVertex(vertexOrKey): boolean;
Defined in: data-structures/graph/undirected-graph.ts:444
Delete a vertex and remove it from all neighbor lists.
Parameters
vertexOrKey
VertexKey | VO
Vertex or key.
Returns
boolean
true if removed; otherwise false.
Remarks
Time O(deg), Space O(1)
Example
// Remove vertex and edges
const g = new UndirectedGraph();
g.addVertex('A');
g.addVertex('B');
g.addEdge('A', 'B');
g.deleteVertex('A');
console.log(g.hasVertex('A')); // false;
Implementation of
IGraph.deleteVertex
Overrides
dijkstraWithoutHeap()
dijkstraWithoutHeap(
src,
dest?,
getMinDist?,
genPaths?): DijkstraResult<VO>;
Defined in: data-structures/graph/abstract-graph.ts:484
Dijkstra without heap (array-based selection).
Parameters
src
VertexKey | VO
Source vertex or key.
dest?
VertexKey | VO | undefined
Optional destination for early stop.
getMinDist?
boolean = false
If true, compute global minimum distance.
genPaths?
boolean = false
If true, also generate path arrays.
Returns
DijkstraResult<VO>
Result bag or undefined if source missing.
Remarks
Time O(V^2 + E), Space O(V + E)
Inherited from
AbstractGraph.dijkstraWithoutHeap
edgeSet()
edgeSet(): EO[];
Defined in: data-structures/graph/undirected-graph.ts:552
Unique set of undirected edges across endpoints.
Returns
EO[]
Array of edges.
Remarks
Time O(E), Space O(E)
Example
// Get all edges
const g = new UndirectedGraph();
g.addVertex('A');
g.addVertex('B');
g.addEdge('A', 'B');
console.log(g.edgeSet().length); // 1;
Implementation of
IGraph.edgeSet
Overrides
edgesOf()
edgesOf(vertexOrKey): EO[];
Defined in: data-structures/graph/undirected-graph.ts:500
Incident undirected edges of a vertex.
Parameters
vertexOrKey
VertexKey | VO
Vertex or key.
Returns
EO[]
Array of incident edges.
Remarks
Time O(deg), Space O(deg)
Implementation of
IGraph.edgesOf
Overrides
entries()
entries(): IterableIterator<[VertexKey, V | undefined]>;
Defined in: data-structures/base/iterable-entry-base.ts:31
Iterate over [key, value] pairs (may yield undefined values).
Returns
IterableIterator<[VertexKey, V | undefined]>
Iterator of [K, V | undefined].
Remarks
Time O(n), Space O(1)
Inherited from
every()
every(predicate, thisArg?): boolean;
Defined in: data-structures/base/iterable-entry-base.ts:66
Test whether all entries satisfy the predicate.
Parameters
predicate
EntryCallback<VertexKey, V | undefined, boolean>
(key, value, index, self) => boolean.
thisArg?
unknown
Optional this for callback.
Returns
boolean
true if all pass; otherwise false.
Remarks
Time O(n), Space O(1)
Inherited from
filter()
filter(predicate, thisArg?): this;
Defined in: data-structures/graph/abstract-graph.ts:897
Induced-subgraph filter: keep vertices where predicate(key, value) is true,
and only keep edges whose endpoints both survive.
Parameters
predicate
EntryCallback<VertexKey, V | undefined, boolean>
(key, value, index, self) => boolean.
thisArg?
unknown
Optional this for callback.
Returns
this
A new graph of the same concrete class (this type).
Remarks
Time O(V + E), Space O(V + E)
Implementation of
IGraph.filter
Inherited from
filterEntries()
filterEntries(predicate, thisArg?): [VertexKey, V | undefined][];
Defined in: data-structures/graph/abstract-graph.ts:913
Preserve the old behavior: return filtered entries as an array.
Parameters
predicate
EntryCallback<VertexKey, V | undefined, boolean>
thisArg?
unknown
Returns
[VertexKey, V | undefined][]
Remarks
Time O(V), Space O(V)
Inherited from
find()
find(callbackfn, thisArg?): [VertexKey, V | undefined] | undefined;
Defined in: data-structures/base/iterable-entry-base.ts:114
Find the first entry that matches a predicate.
Parameters
callbackfn
EntryCallback<VertexKey, V | undefined, boolean>
(key, value, index, self) => boolean.
thisArg?
unknown
Optional this for callback.
Returns
[VertexKey, V | undefined] | undefined
Matching [key, value] or undefined.
Remarks
Time O(n), Space O(1)
Inherited from
floydWarshall()
floydWarshall(): object;
Defined in: data-structures/graph/abstract-graph.ts:798
Floyd–Warshall all-pairs shortest paths.
Returns
object
{ costs, predecessor } matrices.
costs
costs: number[][];
predecessor
predecessor: (VO | undefined)[][];
Remarks
Time O(V^3), Space O(V^2)
Inherited from
forEach()
forEach(callbackfn, thisArg?): void;
Defined in: data-structures/base/iterable-entry-base.ts:99
Visit each entry, left-to-right.
Parameters
callbackfn
EntryCallback<VertexKey, V | undefined, void>
(key, value, index, self) => void.
thisArg?
unknown
Optional this for callback.
Returns
void
Remarks
Time O(n), Space O(1)
Inherited from
get()
get(key): V | undefined;
Defined in: data-structures/base/iterable-entry-base.ts:156
Get the value under a key.
Parameters
key
VertexKey
Key to look up.
Returns
V | undefined
Value or undefined.
Remarks
Time O(n) generic, Space O(1)
Inherited from
getAllPathsBetween()
getAllPathsBetween(
v1,
v2,
limit?): VO[][];
Defined in: data-structures/graph/abstract-graph.ts:309
Enumerate simple paths up to a limit.
Parameters
v1
VertexKey | VO
Source vertex or key.
v2
VertexKey | VO
Destination vertex or key.
limit?
number = 1000
Maximum number of paths to collect.
Returns
VO[][]
Array of paths (each path is an array of vertices).
Remarks
Time O(paths) worst-case exponential, Space O(V + paths)
Inherited from
AbstractGraph.getAllPathsBetween
getBiconnectedComponents()
getBiconnectedComponents(): EO[][];
Defined in: data-structures/graph/undirected-graph.ts:802
Find biconnected components using edge-stack Tarjan variant. A biconnected component is a maximal biconnected subgraph.
Returns
EO[][]
Array of edge arrays, each representing a biconnected component.
Remarks
Time O(V + E), Space O(V + E)
getBridges()
getBridges(): EO[];
Defined in: data-structures/graph/undirected-graph.ts:979
Get bridges discovered by tarjan().
Returns
EO[]
Array of edges that are bridges.
Remarks
Time O(B), Space O(1)
Example
// Find bridge edges
const g = new UndirectedGraph();
g.addVertex('A');
g.addVertex('B');
g.addVertex('C');
g.addEdge('A', 'B');
g.addEdge('B', 'C');
const bridges = g.getBridges();
console.log(bridges.length); // 2;
getCutVertices()
getCutVertices(): VO[];
Defined in: data-structures/graph/undirected-graph.ts:1030
Get articulation points discovered by tarjan().
Returns
VO[]
Array of cut vertices.
Remarks
Time O(C), Space O(1)
Example
// Find articulation points
const g = new UndirectedGraph();
g.addVertex('A');
g.addVertex('B');
g.addVertex('C');
g.addEdge('A', 'B');
g.addEdge('B', 'C');
const cuts = g.getCutVertices();
console.log(cuts.length); // 1;
console.log(cuts[0].key); // 'B';
getCycles()
getCycles(isInclude2Cycle?): VertexKey[][];
Defined in: data-structures/graph/abstract-graph.ts:838
Enumerate simple cycles (may be expensive).
Parameters
isInclude2Cycle?
boolean = false
If true, include 2-cycles when graph semantics allow.
Returns
VertexKey[][]
Array of cycles (each as array of vertex keys).
Remarks
Time exponential in worst-case, Space O(V + E)
Inherited from
getDFNMap()
getDFNMap(): Map<VO, number>;
Defined in: data-structures/graph/undirected-graph.ts:1039
DFN index map computed by tarjan().
Returns
Map<VO, number>
Map from vertex to DFN index.
Remarks
Time O(V), Space O(V)
getEdge()
getEdge(v1, v2): EO | undefined;
Defined in: data-structures/graph/undirected-graph.ts:268
Get an undirected edge between two vertices, if present.
Parameters
v1
VertexKey | VO | undefined
One vertex or key.
v2
VertexKey | VO | undefined
The other vertex or key.
Returns
EO | undefined
Edge instance or undefined.
Remarks
Time O(1) avg, Space O(1)
Example
// Get edge between vertices
const g = new UndirectedGraph();
g.addVertex('A');
g.addVertex('B');
g.addEdge('A', 'B', 7);
console.log(g.getEdge('A', 'B')?.weight); // 7;
Implementation of
IGraph.getEdge
Overrides
getEndsOfEdge()
getEndsOfEdge(edge): [VO, VO] | undefined;
Defined in: data-structures/graph/undirected-graph.ts:652
Resolve an edge's two endpoints to vertex instances.
Parameters
edge
EO
Edge instance.
Returns
[VO, VO] | undefined
[v1, v2] or undefined if either endpoint is missing.
Remarks
Time O(1), Space O(1)
Implementation of
IGraph.getEndsOfEdge
Overrides
getLowMap()
getLowMap(): Map<VO, number>;
Defined in: data-structures/graph/undirected-graph.ts:1048
LOW link map computed by tarjan().
Returns
Map<VO, number>
Map from vertex to LOW value.
Remarks
Time O(V), Space O(V)
getMinCostBetween()
getMinCostBetween(
v1,
v2,
isWeight?): number | undefined;
Defined in: data-structures/graph/abstract-graph.ts:362
Minimum hops/weight between two vertices.
Parameters
v1
VertexKey | VO
Source vertex or key.
v2
VertexKey | VO
Destination vertex or key.
isWeight?
boolean
If true, compare by path weight; otherwise by hop count.
Returns
number | undefined
Minimum cost or undefined if missing/unreachable.
Remarks
Time O((V + E) log V) weighted / O(V + E) unweighted, Space O(V + E)
Inherited from
AbstractGraph.getMinCostBetween
getMinPathBetween()
getMinPathBetween(
v1,
v2,
isWeight?,
isDFS?): VO[] | undefined;
Defined in: data-structures/graph/abstract-graph.ts:415
Minimum path (as vertex sequence) between two vertices.
Parameters
v1
VertexKey | VO
Source vertex or key.
v2
VertexKey | VO
Destination vertex or key.
isWeight?
boolean
If true, compare by path weight; otherwise by hop count.
isDFS?
boolean = false
For weighted mode only: if true, brute-force all paths; if false, use Dijkstra.
Returns
VO[] | undefined
Vertex sequence, or undefined/empty when unreachable depending on branch.
Remarks
Time O((V + E) log V) weighted / O(V + E) unweighted, Space O(V + E)
Inherited from
AbstractGraph.getMinPathBetween
getNeighbors()
getNeighbors(vertexOrKey): VO[];
Defined in: data-structures/graph/undirected-graph.ts:631
UndirectedGraph connectivity and neighbors
Parameters
vertexOrKey
VertexKey | VO
Returns
VO[]
Example
// UndirectedGraph connectivity and neighbors
const graph = new UndirectedGraph<string>();
// Build a friendship network
const people = ['Alice', 'Bob', 'Charlie', 'Diana', 'Eve'];
for (const person of people) {
graph.addVertex(person);
}
// Add friendships (undirected edges)
graph.addEdge('Alice', 'Bob', 1);
graph.addEdge('Alice', 'Charlie', 1);
graph.addEdge('Bob', 'Diana', 1);
graph.addEdge('Charlie', 'Eve', 1);
graph.addEdge('Diana', 'Eve', 1);
// Get friends of each person
const aliceFriends = graph.getNeighbors('Alice');
console.log(aliceFriends[0].key); // 'Bob';
console.log(aliceFriends[1].key); // 'Charlie';
console.log(aliceFriends.length); // 2;
const dianaFriends = graph.getNeighbors('Diana');
console.log(dianaFriends[0].key); // 'Bob';
console.log(dianaFriends[1].key); // 'Eve';
console.log(dianaFriends.length); // 2;
// Verify bidirectional friendship
const bobFriends = graph.getNeighbors('Bob');
console.log(bobFriends[0].key); // 'Alice'; // Alice -> Bob -> Alice ✓
console.log(bobFriends[1].key); // 'Diana';
Implementation of
IGraph.getNeighbors
Overrides
getPathSumWeight()
getPathSumWeight(path): number;
Defined in: data-structures/graph/abstract-graph.ts:346
Sum the weights along a vertex path.
Parameters
path
VO[]
Sequence of vertices.
Returns
number
Path weight sum (0 if empty or edge missing).
Remarks
Time O(L), Space O(1) where L is path length
Inherited from
AbstractGraph.getPathSumWeight
getVertex()
getVertex(vertexKey): VO | undefined;
Defined in: data-structures/graph/abstract-graph.ts:175
Get vertex instance by key.
Parameters
vertexKey
VertexKey
Vertex key.
Returns
VO | undefined
Vertex instance or undefined.
Remarks
Time O(1), Space O(1)
Implementation of
IGraph.getVertex
Inherited from
has()
has(key): boolean;
Defined in: data-structures/base/iterable-entry-base.ts:129
Whether the given key exists.
Parameters
key
VertexKey
Key to test.
Returns
boolean
true if found; otherwise false.
Remarks
Time O(n) generic, Space O(1)
Inherited from
hasCycle()
hasCycle(): boolean;
Defined in: data-structures/graph/undirected-graph.ts:910
Detect whether the graph contains a cycle. Uses DFS with parent tracking.
Returns
boolean
true if a cycle exists, false otherwise.
Remarks
Time O(V + E), Space O(V)
Example
// Detect cycle
const g = new UndirectedGraph();
g.addVertex('A');
g.addVertex('B');
g.addVertex('C');
g.addEdge('A', 'B');
g.addEdge('B', 'C');
console.log(g.hasCycle()); // false;
g.addEdge('C', 'A');
console.log(g.hasCycle()); // true;
hasEdge()
hasEdge(v1, v2): boolean;
Defined in: data-structures/graph/abstract-graph.ts:249
Whether an edge exists between two vertices.
Parameters
v1
VertexKey | VO
Endpoint A vertex or key.
v2
VertexKey | VO
Endpoint B vertex or key.
Returns
boolean
true if present; otherwise false.
Remarks
Time O(1) avg, Space O(1)
Inherited from
hasValue()
hasValue(value): boolean;
Defined in: data-structures/base/iterable-entry-base.ts:143
Whether there exists an entry with the given value.
Parameters
value
V | undefined
Value to test.
Returns
boolean
true if found; otherwise false.
Remarks
Time O(n), Space O(1)
Inherited from
hasVertex()
hasVertex(vertexOrKey): boolean;
Defined in: data-structures/graph/abstract-graph.ts:185
Whether a vertex exists.
Parameters
vertexOrKey
VertexKey | VO
Vertex or key.
Returns
boolean
true if present, otherwise false.
Remarks
Time O(1) avg, Space O(1)
Implementation of
IGraph.hasVertex
Inherited from
isEmpty()
isEmpty(): boolean;
Defined in: data-structures/graph/undirected-graph.ts:669
Whether the graph has no vertices and no edges.
Returns
boolean
Remarks
Time O(1), Space O(1)
Implementation of
IGraph.isEmpty
Overrides
isVertexKey()
isVertexKey(potentialKey): potentialKey is VertexKey;
Defined in: data-structures/graph/abstract-graph.ts:215
Type guard: check if a value is a valid vertex key.
Parameters
potentialKey
unknown
Value to test.
Returns
potentialKey is VertexKey
true if string/number; else false.
Remarks
Time O(1), Space O(1)
Inherited from
keys()
keys(): IterableIterator<VertexKey>;
Defined in: data-structures/base/iterable-entry-base.ts:42
Iterate over keys only.
Returns
IterableIterator<VertexKey>
Iterator of keys.
Remarks
Time O(n), Space O(1)
Inherited from
map()
map<T>(callback, thisArg?): T[];
Defined in: data-structures/graph/abstract-graph.ts:928
Map entries using an implementation-specific strategy.
Type Parameters
T
T
Parameters
callback
EntryCallback<VertexKey, V | undefined, T>
thisArg?
unknown
Returns
T[]
Remarks
Time O(n), Space O(n)
Inherited from
print()
print(options?): void;
Defined in: data-structures/graph/abstract-graph.ts:1183
Print the graph to console.
Parameters
options?
Display settings passed to toVisual.
showWeight?
boolean
Returns
void
Inherited from
reduce()
reduce<U>(callbackfn, initialValue): U;
Defined in: data-structures/base/iterable-entry-base.ts:171
Reduce entries into a single accumulator.
Type Parameters
U
U
Parameters
callbackfn
ReduceEntryCallback<VertexKey, V | undefined, U>
(acc, value, key, index, self) => acc.
initialValue
U
Initial accumulator.
Returns
U
Final accumulator.
Remarks
Time O(n), Space O(1)
Inherited from
removeManyVertices()
removeManyVertices(vertexMap): boolean;
Defined in: data-structures/graph/abstract-graph.ts:234
Delete multiple vertices.
Parameters
vertexMap
VertexKey[] | VO[]
Array of vertices or keys.
Returns
boolean
true if any vertex was removed.
Remarks
Time O(sum(deg)), Space O(1)
Inherited from
AbstractGraph.removeManyVertices
setEdgeWeight()
setEdgeWeight(
srcOrKey,
destOrKey,
weight): boolean;
Defined in: data-structures/graph/abstract-graph.ts:291
Set the weight of an existing edge.
Parameters
srcOrKey
VertexKey | VO
Source vertex or key.
destOrKey
VertexKey | VO
Destination vertex or key.
weight
number
New weight.
Returns
boolean
true if updated; otherwise false.
Remarks
Time O(1) avg, Space O(1)
Inherited from
some()
some(predicate, thisArg?): boolean;
Defined in: data-structures/base/iterable-entry-base.ts:83
Test whether any entry satisfies the predicate.
Parameters
predicate
EntryCallback<VertexKey, V | undefined, boolean>
(key, value, index, self) => boolean.
thisArg?
unknown
Optional this for callback.
Returns
boolean
true if any passes; otherwise false.
Remarks
Time O(n), Space O(1)
Inherited from
tarjan()
tarjan(): object;
Defined in: data-structures/graph/undirected-graph.ts:737
Tarjan-based bridge and articulation point detection.
Returns
object
{ dfnMap, lowMap, bridges, cutVertices }.
bridges
bridges: EO[];
cutVertices
cutVertices: VO[];
dfnMap
dfnMap: Map<VO, number>;
lowMap
lowMap: Map<VO, number>;
Remarks
Time O(V + E), Space O(V + E)
Example
// Find articulation points and bridges
const g = new UndirectedGraph();
g.addVertex('A');
g.addVertex('B');
g.addVertex('C');
g.addEdge('A', 'B');
g.addEdge('B', 'C');
const result = g.tarjan();
console.log(result); // defined;
toArray()
toArray(): [VertexKey, V | undefined][];
Defined in: data-structures/base/iterable-entry-base.ts:186
Converts data structure to [key, value] pairs.
Returns
[VertexKey, V | undefined][]
Array of entries.
Remarks
Time O(n), Space O(n)
Inherited from
toDot()
toDot(options?): string;
Defined in: data-structures/graph/abstract-graph.ts:1143
Generate DOT language representation for Graphviz.
Parameters
options?
Optional display settings.
name?
string
Graph name (default: 'G').
showWeight?
boolean
Whether to label edges with weight (default: true).
Returns
string
DOT format string.
Inherited from
toVisual()
toVisual(options?): string;
Defined in: data-structures/graph/abstract-graph.ts:1108
Generate a text-based visual representation of the graph.
Adjacency list format:
Graph (5 vertices, 6 edges):
A -> B (1), C (2)
B -> D (3)
C -> (no outgoing edges)
D -> A (1)
E (isolated)
Parameters
options?
Optional display settings.
showWeight?
boolean
Whether to show edge weights (default: true).
Returns
string
The visual string.
Inherited from
values()
values(): IterableIterator<V | undefined>;
Defined in: data-structures/base/iterable-entry-base.ts:53
Iterate over values only.
Returns
IterableIterator<V | undefined>
Iterator of values.
Remarks
Time O(n), Space O(1)
Inherited from
fromEntries()
static fromEntries<V>(entries): UndirectedGraph<V, undefined, UndirectedVertex<V>, UndirectedEdge<undefined>>;
Defined in: data-structures/graph/undirected-graph.ts:191
Construct an undirected graph from [key, value] entries.
Type Parameters
V
V
Vertex value type.
Parameters
entries
Iterable<[VertexKey, V]>
Iterable of [key, value] pairs.
Returns
UndirectedGraph<V, undefined, UndirectedVertex<V>, UndirectedEdge<undefined>>
UndirectedGraph with all vertices added.
Remarks
Time O(V), Space O(V)
fromKeys()
static fromKeys<K>(keys): UndirectedGraph<K, undefined, UndirectedVertex<K>, UndirectedEdge<undefined>>;
Defined in: data-structures/graph/undirected-graph.ts:174
Construct an undirected graph from keys with value initializer v => v.
Type Parameters
K
K extends VertexKey
Vertex key type.
Parameters
keys
Iterable<K>
Iterable of vertex keys.
Returns
UndirectedGraph<K, undefined, UndirectedVertex<K>, UndirectedEdge<undefined>>
UndirectedGraph with all keys added.
Remarks
Time O(V), Space O(V)
Protected Members
_edgeConnector
Get Signature
get protected _edgeConnector(): string;
Defined in: data-structures/graph/abstract-graph.ts:1087
The edge connector string used in visual output. Override in subclasses (e.g., '--' for undirected, '->' for directed).
Returns
string
Inherited from
_addEdge()
protected _addEdge(edge): boolean;
Defined in: data-structures/graph/undirected-graph.ts:1058
Internal hook to attach an undirected edge into adjacency maps.
Parameters
edge
EO
Edge instance.
Returns
boolean
true if both endpoints exist; otherwise false.
Remarks
Time O(1) avg, Space O(1)
Overrides
_addVertex()
protected _addVertex(newVertex): boolean;
Defined in: data-structures/graph/abstract-graph.ts:1054
Insert a pre-built vertex into the graph.
Parameters
newVertex
VO
Concrete vertex instance.
Returns
boolean
true if inserted; false if key already exists.
Remarks
Time O(1) avg, Space O(1)
Inherited from
_createInstance()
protected _createInstance(_options?): this;
Defined in: data-structures/graph/abstract-graph.ts:987
Create an empty graph instance of the same concrete species.
Parameters
_options?
Partial<Record<string, unknown>>
Snapshot options from _snapshotOptions().
Returns
this
A new empty graph instance of this type.
Remarks
Time O(1), Space O(1)
Inherited from
_createLike()
protected _createLike(iter?, options?): this;
Defined in: data-structures/graph/abstract-graph.ts:1009
Create a same-species graph populated with entries; preserves edges among kept vertices.
Parameters
iter?
Iterable<[VertexKey, V | undefined], any, any>
Optional entries to seed the new graph.
options?
Partial<Record<string, unknown>>
Snapshot options.
Returns
this
A new graph of this type.
Remarks
Time O(V + E), Space O(V + E)
Inherited from
_getIterator()
protected _getIterator(): IterableIterator<[VertexKey, V | undefined]>;
Defined in: data-structures/graph/abstract-graph.ts:958
Internal iterator over [key, value] entries in insertion order.
Returns
IterableIterator<[VertexKey, V | undefined]>
Iterator of [VertexKey, V | undefined].
Remarks
Time O(V), Space O(1)
Inherited from
_getVertex()
protected _getVertex(vertexOrKey): VO | undefined;
Defined in: data-structures/graph/abstract-graph.ts:1068
Resolve a vertex key or instance to the concrete vertex instance.
Parameters
vertexOrKey
VertexKey | VO
Vertex key or existing vertex.
Returns
VO | undefined
Vertex instance or undefined.
Remarks
Time O(1), Space O(1)
Inherited from
_getVertexKey()
protected _getVertexKey(vertexOrKey): VertexKey;
Defined in: data-structures/graph/abstract-graph.ts:1079
Resolve a vertex key from a key or vertex instance.
Parameters
vertexOrKey
VertexKey | VO
Vertex key or existing vertex.
Returns
VertexKey
The vertex key.
Remarks
Time O(1), Space O(1)
Inherited from
_snapshotOptions()
protected _snapshotOptions(): Record<string, unknown>;
Defined in: data-structures/graph/abstract-graph.ts:973
Capture configuration needed to reproduce the current graph.
Returns
Record<string, unknown>
Options bag (opaque to callers).
Remarks
Time O(1), Space O(1)
Inherited from
AbstractGraph._snapshotOptions