Probabilmente di ta problemi nel caso il DFA non sia completo.funziona solo in caso di alcuni automi, non in altri,
Credo che il problema sia qui:
Fai il controllo su eq[][] solo se entrambe le transizioni sono valide(se il dfa è completo non avrai mai problemi).codice:if(arrivoI!=-1 && arrivoJ!=-1 && !eq[arrivoI][arrivoJ]) { eq[i][j]=false; cambiamento=true; }
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:
Potresti anche usare un unico if.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; }