code: public <I, A extends MutableDeterministic<?, I, ?, ? super SP, ? super TP>> A generateICDeterministicAutomaton(int numStates,
                                                                                                                     Alphabet<I> alphabet,
                                                                                                                     AutomatonCreator<? extends A, I> creator,
                                                                                                                     Random r) {
          A result = creator.createAutomaton(alphabet, numStates);
          return generateICDeterministicAutomaton(numStates, alphabet, result, r);
      }
docs: Generates an initially-connected (IC) deterministic automaton with the given parameters. The resulting automaton
  is instantiated using the given {@code creator}. Note that the resulting automaton will <b>not</b> be minimized.
  
  @param numStates
  the number of states of the resulting automaton
  @param alphabet
  the input alphabet of the resulting automaton
  @param creator
  an {@link AutomatonCreator} for instantiating the result automaton
  @param r
  the randomness source
  
  @return a randomly-generated IC deterministic automaton