### CHAPTER I.

# 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 GraphNode

graph.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 node

graph.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 edge

graph.edges .length // total number of edges

`graph.`nodes [ ].adjacentEdges ()

graph.edges [ ].adjacentEdges ()

Ways that edges can be invalid:

- CIRCULAR an edge cannot connect a node to the same node
- 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 removed

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

Removing Nodes:

`graph.`removeNode (node ) // # of nodes removed

graph.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