CHAPTER I.

GRAPHS

A graph is a collection of nodes and edges

let graph = new Graph()

This creates an empty graph with no nodes or edges

Graphs don't exist in 2D space (or any space), they are an abstract map showing connections between nodes.

§ Nodes and Edges

The graph holds onto all its nodes and edges in arrays.
The types are Graph Node and Graph Edge.

graph.nodes = []  // array of GraphNode
graph.edges = [] // array of GraphEdge

This operation makes a new node and returns a reference to it.

let node = graph.newNode()  // node is a GraphNode

A new edge needs to know the 2 nodes its connecting.

let edge = graph.newEdge(node1, node2)  // edge is a GraphEdge

You can always grab a node or an edge again

graph.newNode()
let node = graph.nodes[0] // the first node

§ Nodes

This graph is interactive

graph.nodes[].adjacentNodes()
graph.edges[].adjacentNodes()

Two nodes are adjacent if they are connected by an edge

§ Edges

An edge connects two nodes

graph.edges[0]  // the first edge
graph.edges.length // total number of edges
graph.nodes[].adjacentEdges()
graph.edges[].adjacentEdges()

Invalid edges
Circular: an edge cannot connect the same node at both ends
Duplicate: the same 2 nodes cannot have more than 1 edge between them

§ Remove

graph.removeNode(node)

When removing a node, any edges which share the node will be removed also.

graph.removeEdge(edge)

Removing an edge will do simply that and the nodes remain untouched.

§ Clean

graph.clean()

Cleaning a graph removes duplicate and circular edges. You can also target specific edges:

graph.removeEdge(edge)
graph.removeEdgeBetween(node1, node2)

Removing Nodes:

graph.removeNode(node)
graph.removeIsolatedNodes()

Isolated nodes are nodes that aren't connected to an edge.

graph.mergeNodes(node1,node2)

Each of these functions returns a GraphClean Object

{
  edges:{total:number, duplicate:number, circular:number},
  nodes:{total:number, isolated:number}
}

Each of the entries in a GraphClean object is the number of elements of that type removed