# GRAPHS

A graph is a collection of nodes and edges (circles and lines)

var graph = new Graph()

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

## § Nodes and Edges

All of a graph's nodes and edges are stored in arrays called nodes and edges.
The types are Graph Node and Graph Edge.

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

This makes a new node. You can store a reference to it.

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

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

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

## § Nodes

graph.nodes[0]  // the first nodegraph.nodes.length  // total number of nodes

This graph is interactive with the code below

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 edgegraph.edges.length  // total number of edges
graph.nodes[].adjacentEdges()graph.edges[].adjacentEdges()

Ways that edges can be invalid:

1. CIRCULAR an edge cannot connect a node to the same node
2. 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() // # of edges removed

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

graph.removeEdge(edge)  // # of edges removedgraph.removeEdgeBetween(node1, node2)  // # of edges removed

Removing Nodes:

graph.removeNode(node)  // # of nodes removedgraph.removeIsolatedNodes() // # of nodes removed

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

var node = graph.mergeNodes(node1,node2) // node is a GraphNode