{{alias}}( N ) Compact adjacency matrix constructor. Parameters ---------- N: integer Number of vertices. Returns ------- adj: Object Compact adjacency matrix. Examples -------- > var adj = {{alias}}( 4 ); > adj.addEdge( 0, 1 ); > adj.addEdge( 1, 2 ); > adj.addEdge( 2, 3 ); > adj.edges [ [ 0, 1 ], [ 1, 2 ], [ 2, 3 ] ] {{alias}}.fromAdjacencyList( list[, clbk[, thisArg]] ) Creates a compact adjacency matrix from an adjacency list. A callback function is provided two arguments: - value: list element. - i: list element index. A callback function must return a list of vertices. Parameters ---------- list: ArrayLikeObject|Iterable Adjacency list. clbk: Function (optional) Callback to invoke for each list element. thisArg: any (optional) Callback execution context. Returns ------- adj: Object Compact adjacency matrix. Examples -------- > var list = [ [ 1, 2 ], [ 2 ], [ 3 ], [] ]; > var adj = {{alias}}.fromAdjacencyList( list ); > adj.edges [ [ 0, 1 ], [ 0, 2 ], [ 1, 2 ], [ 2, 3 ] ] {{alias}}.fromEdges( N, edges[, clbk[, thisArg]] ) Creates a compact adjacency matrix from a list of edges. A callback function is provided two arguments: - value: list element. - i: list element index. A callback function must return a list of vertices specifying a directed edge. Parameters ---------- N: integer Number of vertices. edges: ArrayLikeObject List of edges. clbk: Function (optional) Callback to invoke for each list element. thisArg: any (optional) Callback execution context. Returns ------- adj: Object Compact adjacency matrix. Examples -------- > var edges = [ [ 0, 1 ], [ 0, 2 ], [ 1, 2 ], [ 2, 3 ] ]; > var adj = {{alias}}.fromEdges( 4, edges ); > var bool = adj.hasEdge( 0, 2 ) true {{alias}}.prototype.addEdge( i, j ) Adds a directed edge between two vertices. Parameters ---------- i: integer Starting vertex. j: integer Ending vertex. Returns ------- adj: Object Adjacency matrix instance. Examples -------- > var adj = {{alias}}( 4 ); > adj.addEdge( 0, 1 ); {{alias}}.prototype.edges Returns the list of all edges. Returns ------- list: Array List of edges. Examples -------- > var adj = {{alias}}( 4 ); > adj.addEdge( 0, 1 ); > adj.addEdge( 0, 2 ); > adj.addEdge( 1, 2 ); > adj.edges [ [ 0, 1 ], [ 0, 2 ], [ 1, 2 ] ] {{alias}}.prototype.hasEdge( i, j ) Checks whether a directed edge exists between two vertices. Parameters ---------- i: integer Starting vertex. j: integer Ending vertex. Returns ------- bool: boolean Boolean indicating if an edge exists. Examples -------- > var adj = {{alias}}( 4 ); > adj.addEdge( 0, 1 ); > var bool = adj.hasEdge( 0, 1 ) true {{alias}}.prototype.inDegree( i ) Returns the indegree of a vertex (i.e., number of edges ending at a vertex). Parameters ---------- i: integer Vertex. Returns ------- v: integer Indegree. Examples -------- > var adj = {{alias}}( 4 ); > adj.addEdge( 0, 1 ); > adj.addEdge( 0, 2 ); > adj.addEdge( 1, 2 ); > adj.addEdge( 2, 3 ); > var v = adj.inDegree( 2 ) 2 {{alias}}.prototype.inEdges( i ) Returns a list of vertices having edges ending at a specified vertex. Parameters ---------- i: integer Vertex. Returns ------- out: Array List of vertices. Examples -------- > var adj = {{alias}}( 4 ); > adj.addEdge( 0, 1 ); > adj.addEdge( 0, 2 ); > adj.addEdge( 1, 2 ); > adj.addEdge( 2, 3 ); > var out = adj.inEdges( 2 ) [ 0, 1 ] {{alias}}.prototype.nedges Returns the total number of edges. Returns ------- v: integer Total number of edges. Examples -------- > var adj = {{alias}}( 4 ); > adj.addEdge( 0, 1 ); > adj.addEdge( 0, 2 ); > adj.addEdge( 1, 2 ); > var out = adj.nedges 3 {{alias}}.prototype.nvertices Returns the total number of vertices. Returns ------- v: integer Total number of vertices. Examples -------- > var adj = {{alias}}( 4 ); > adj.addEdge( 0, 1 ); > adj.addEdge( 0, 2 ); > adj.addEdge( 1, 2 ); > var out = adj.nvertices 4 {{alias}}.prototype.outDegree( i ) Returns the outdegree of a vertex (i.e., number of edges starting at a vertex). Parameters ---------- i: integer Vertex. Returns ------- v: integer Outdegree. Examples -------- > var adj = {{alias}}( 4 ); > adj.addEdge( 0, 1 ); > adj.addEdge( 0, 2 ); > adj.addEdge( 1, 2 ); > adj.addEdge( 2, 3 ); > var v = adj.outDegree( 2 ) 1 {{alias}}.prototype.outEdges( i ) Returns a list of vertices having edges starting at a specified vertex. Parameters ---------- i: integer Vertex. Returns ------- out: Array List of vertices. Examples -------- > var adj = {{alias}}( 4 ); > adj.addEdge( 0, 1 ); > adj.addEdge( 0, 2 ); > adj.addEdge( 1, 2 ); > adj.addEdge( 2, 3 ); > var out = adj.outEdges( 2 ) [ 3 ] {{alias}}.prototype.removeEdge( i, j ) Removes a directed edge between two vertices. Parameters ---------- i: integer Starting vertex. j: integer Ending vertex. Returns ------- adj: Object Adjacency matrix instance. Examples -------- > var adj = {{alias}}( 4 ); > adj.addEdge( 0, 1 ); > adj.edges {{alias}}.prototype.toAdjacencyList() Returns an adjacency list representation. Returns ------- out: Array Adjacency list. Examples -------- > var adj = {{alias}}( 4 ); > adj.addEdge( 0, 1 ); > adj.addEdge( 0, 2 ); > adj.addEdge( 1, 2 ); > adj.addEdge( 2, 3 ); > var out = adj.toAdjacencyList() [ [ 1, 2 ], [ 2 ], [ 3 ], [] ] {{alias}}.prototype.toposort() Returns a topological ordering of the directed graph. The function returns a two-element array. If the function is able to compute a topological ordering, the first array element is the topological ordering and the second element is `null`. If a topological ordering cannot be achieved (e.g., due to the graph not being a directed acyclic graph (DAG)), the first array element is `null` and the second element is the first encountered cycle. Returns ------- out: Array Results. Examples -------- > var adj = {{alias}}( 4 ); > adj.addEdge( 1, 0 ); > adj.addEdge( 1, 2 ); > adj.addEdge( 0, 2 ); > adj.addEdge( 2, 3 ); > var results = adj.toposort(); > var o = results[ 0 ] [ 1, 0, 2, 3 ] > var c = results[ 1 ] null > adj.addEdge( 3, 1 ); > results = adj.toposort(); > o = results[ 0 ] null > var c = results[ 1 ] [ 0, 1, 3, 2, 0 ] See Also --------