def tsort(label = nil, &edge_filter)
      if edge_filter
        Algorithms::FilteredTarjan.new(self, &edge_filter)
      else
        Algorithms::Tarjan.new(self, label)
      end.tsort
    rescue TSort::Cyclic => exception
      raise CyclicError.new(exception)
    end
def tsort(label = nil, &edge_filter)
      if edge_filter
        Algorithms::FilteredTarjan.new(self, &edge_filter)
      else
        Algorithms::Tarjan.new(self, label)
      end.tsort
    rescue TSort::Cyclic => exception
      raise CyclicError.new(exception)
    end
Public: Topologically sorts the nodes in the graph so that nodes with
 no in edges appear at the beginning of the array, and those deeper
 within the graph are at the end.

 label - An optional label used to limit the edges used when traversing
         from one node to its outward nodes.

 Raises CyclicError if the graph contains loops.

 Returns an array.