javascript-graphs
An easy to use graph data structure with some useful algorithms.
Install
Using npm:
npm i javascript-graphs
The Graph data structure
Import with ES6 modules:
import Graph from "javascript-graphs";
The constructor syntax:
new Graph(directed?: boolean);
Using the graph:
import Graph from "javascript-graphs";
const G = new Graph();
const G2 = new Graph(false);
G.addEdge("A", "B");
G.addEdge("B", "A");
G.addEdge("B", "C");
G.addVertex("D");
G.deleteEdge("B", "C");
for (const v of G.getVertexs()) {
console.log(v);
}
for (const [u, v] of G.getEdges()) {
console.log(`(${u}, ${v})`);
}
G.addEdge("B", "D");
G.addEdge("B", "E");
for (const v of G.neighbors("B")) {
console.log(v);
}
Algorithms
Some algorithms examples:
import Graph from "javascript-graphs";
import {
findStronglyConnectedComponents,
topologicalSort,
findEulerianCircuit,
DFS,
} from "javascript-graphs";
const G = new Graph();
G.addEdge("A", "B");
G.addEdge("B", "A");
G.addEdge("B", "C");
G.addEdge("C", "A");
G.addEdge("C", "D");
G.addEdge("D", "E");
G.addEdge("E", "D");
const components = findStronglyConnectedComponents(G);
for (const component of components) {
console.log(component.getEdges());
}
const G2 = new Graph();
G2.addEdge("foo", "bar");
G2.addEdge("foo", "qux");
G2.addEdge("baz", "qux");
G2.addEdge("qux", "quux");
for (const v of topologicalSort(G2)) {
console.log(v);
}
const G3 = new Graph();
G3.addEdge("a", "b");
G3.addEdge("b", "c");
G3.addEdge("c", "b");
G3.addEdge("b", "a");
for (const v of findEulerianCircuit(G3)) {
console.log(v);
}
Using DFS search and it's return values:
const G = new Graph();
G.addEdge("A", "B");
G.addEdge("B", "A");
G.addEdge("B", "C");
G.addEdge("C", "A");
G.addEdge("C", "D");
G.addEdge("D", "E");
G.addEdge("E", "D");
const { trees, timestamps, discoveryList, endingList } = DFS(G);
for (const tree of trees) {
console.log(tree.getEdges());
}
console.log(timestamps);
for (const v of discoveryList) {
console.log(v);
}
for (const v of endingList) {
console.log(v);
}
The full list of algorithms
- DFS
- hasEulerianCircuit
- findCiruit
- findEulerianCircuit
- isConnected
- findComponents
- hasCircuit
- topologicalSort
- topologicalSortDFS
- transpose
- printEdges
- isStronglyConnected
- findStronglyConnectedComponents
License
MIT