code: function dfs(g, vs, order) {
    if (!_.isArray(vs)) {
      vs = [vs];
    }
  
    var navigation = (g.isDirected() ? g.successors : g.neighbors).bind(g);
  
    var acc = [];
    var visited = {};
    _.each(vs, function(v) {
      if (!g.hasNode(v)) {
        throw new Error("Graph does not have node: " + v);
      }
  
      doDfs(g, v, order === "post", visited, navigation, acc);
    });
    return acc;
  }
docs: /*
  A helper that preforms a pre- or post-order traversal on the input graph
  and returns the nodes in the order they were visited. If the graph is
  undirected then this algorithm will navigate using neighbors. If the graph
  is directed then this algorithm will navigate using successors.
  
  Order must be one of "pre" or "post".