Graphs
This library contain an implementation of graph data structure
with various method that can be useful in operations by graphs.
Graphs can directed and undirected, weighted and unweighted.
So we have 4 variations and this library can works with them.
Install
npm install graphs-all
Getting Started
Import the library
var graphs = require("graphs-all");
var g = graphs.UndirectedUnweightedGraph();
g.addNode("A");
g.addLink("A", "B");
g.addLink("A", "C");
g.addLink("B", "C");
g.hasNode("C")
g.hasLink("B", "A")
g.removeLink("C", "A");
g.connectedWith("B")
Create a graph
You can create four variations of graphs with shortcuts functions:
var simpleGraph = graphs.UndirectedUnweightedGraph(),
directedGraph = graphs.DirectedUnweightedGraph(),
weightedGraph = graph.UndirectedWeightedGraph(),
complexGraph = graph.DirectedWeightedGraph();
Or with Graph
class:
new Graph(isDirected, isWeighted)
var simpleGraph = new graphs.Graph(false, false),
directedGraph = new graphs.Graph(true, false),
weightedGraph = new graphs.Graph(false, true),
complexGraph = new graphs.Graph(true, true);
Add nodes
Graph.addNode(nodeKey)
Add a node in the graph with key nodeKey
. If node is exist already,
then return false
, for successive addition returns true
.
simpleGraph.addNode("A")
simpleGraph.hasNode("B")
simpleGraph.hasNode("A")
Check nodes
Graph.hasNode(nodeKey)
Check is a node with key nodekey
in the graph
simpleGraph.hasNode("A")
simpleGraph.hasNode("E")
Add links
Graph.addLink(key1, key2)
Graph.addLink(key1, key2, weight)
Add a link between key1
and key2
nodes. If nodes are not existed, then they are created.
For directed graphs, it's created a directed link from key1
to key2
.
For weighted graphs you can add the third argument weight
(default == 1).
weight
must be a number.
simpleGraph.addLink("A", "E");
simpleGraph.hasNode("E");
weightedGraph.addLink("E", "C", 5);
Check links
Graph.hasLink(key1, key2)
Graph.linkWeight(key1, key2)
Check the existence of the link between key1
and key2
nodes (the order is important only for directed graphs).
It returns true
if the link is exist, false
otherwise.
Also you can use linkWeight
- it has the same interface and returns undefined
if the link doesn't exist,
otherwise the weight of the link (1 for unweighted graphs).
simpleGraph.addLink("A", "E");
simpleGraph.hasLink("E", "A");
weightedGraph.addLink("E", "C", 5);
weightedGraph.linkWeight("E", "C");
simpleGraph.linkWeight("Z", "A");
Get node list
Graph.nodes()
Returns an array on node keys.
simpleGraph.addLink(1, 2);
simpleGraph.addLink(3, 4);
simpleGraph.nodes();
Get node connections
Graph.connectedWith(key)
Returns an array of keys of nodes, which are connected with the given node.
For directed graphs return only nodes that are available from from the given node.
simpleGraph.addLink("A", "D");
simpleGraph.addLink("A", "E");
simpleGraph.addLink("C", "A");
simpleGraph.nodeConnections("A");
directedGraph.addLink("A", "B");
directedGraph.addLink("C", "A");
directedGraph.nodeConnections("A");
Remove Nodes
Graph.removeNode(key)
Removes the node from the graph, also remove all connected links (input and output).
directedGraph.addLink("1", "2");
directedGraph.addLink("3", "1");
directedGraph.addLink("1", "4");
directedGraph.removeNode("1");
directedGraph.hasNode("1");
directedGraph.hasLink("1", "2");
directedGraph.hasLink("3", "1");
Remove Links
Graph.removeLink(key1, key2)
Removes the link from the graph. The nodes are not removed, only the link.
For directed graphs remove only one-way link from key1
to key2
.
simpleGraph.addLink("5", "6");
simpleGraph.removeLink("6", "5");
simpleGraph.hasLink("5", "6");
simpleGraph.hasNode("5");