code: function depthFirstSearch(sourceNodes, includeSourceNodes){
  
      if(!sourceNodes){
        sourceNodes = nodes();
      }
  
      if(typeof includeSourceNodes !== "boolean"){
        includeSourceNodes = true;
      }
  
      var visited = {};
      var nodeList = [];
  
      function DFSVisit(node){
        if(!visited[node]){
          visited[node] = true;
          adjacent(node).forEach(DFSVisit);
          nodeList.push(node);
        }
      }
  
      if(includeSourceNodes){
        sourceNodes.forEach(DFSVisit);
      } else {
        sourceNodes.forEach(function (node){
          visited[node] = true;
        });
        sourceNodes.forEach(function (node){
          adjacent(node).forEach(DFSVisit);
        });
      }
  
      return nodeList;
    }
docs: Depth First Search algorithm, inspired by Cormen et al. "Introduction to Algorithms" 3rd Ed. p. 604 This variant includes an additional option `includeSourceNodes` to specify whether to include or exclude the source nodes from the result (true by default). If `sourceNodes` is not specified, all nodes in the graph are used as source nodes.