funziona solo in caso di alcuni automi, non in altri,
Probabilmente di ta problemi nel caso il DFA non sia completo.

Credo che il problema sia qui:
codice:
if(arrivoI!=-1 && arrivoJ!=-1 && !eq[arrivoI][arrivoJ]) {
      eq[i][j]=false;
      cambiamento=true;
}
Fai il controllo su eq[][] solo se entrambe le transizioni sono valide(se il dfa è completo non avrai mai problemi).
Nel caso il DFA non sia completo può capitare che per un dato carattere esista una transizione valida partendo dallo stato i ma non dallo stato j; in questo caso devi considerare i due stati distinguibili.

Potresti testare la validità degli stati di arrivo in xor:
codice:
if(arrivoI!=-1 && arrivoJ!=-1 && !eq[arrivoI][arrivoJ]) {
    eq[i][j]=false;
    cambiamento=true;
}
else if((arrivoI!=-1 ^ arrivoJ!=-1) && !eq[arrivoI][arrivoJ] ){
    eq[i][j]=false;
    cambiamento=true;
}
Potresti anche usare un unico if.