function _initializeQuotientGraph(n, cptr, W, len, head, last, next, hhead, nv, w, elen, degree) {
    // Initialize quotient graph
    for (var k = 0; k < n; k++) {
      W[len + k] = cptr[k + 1] - cptr[k];
    }

    W[len + n] = 0; // initialize workspace

    for (var i = 0; i <= n; i++) {
      // degree list i is empty
      W[head + i] = -1;
      last[i] = -1;
      W[next + i] = -1; // hash list i is empty

      W[hhead + i] = -1; // node i is just one node

      W[nv + i] = 1; // node i is alive

      W[w + i] = 1; // Ek of node i is empty

      W[elen + i] = 0; // degree of node i

      W[degree + i] = W[len + i];
    } // clear w


    var mark = _wclear(0, 0, W, w, n); // n is a dead element


    W[elen + n] = -2; // n is a root of assembly tree

    cptr[n] = -1; // n is a dead element

    W[w + n] = 0; // return mark

    return mark;
  }
Initialize quotient graph. There are four kind of nodes and elements that must be represented:

 - A live node is a node i (or a supernode) that has not been selected as a pivot nad has not been merged into another supernode.
 - A dead node i is one that has been removed from the graph, having been absorved into r = flip(ptr[i]).
 - A live element e is one that is in the graph, having been formed when node e was selected as the pivot.
 - A dead element e is one that has benn absorved into a subsequent element s = flip(ptr[e]).