public List<DFAState> GetAnyDFAPathToTarget(DFAState startState, DFAState targetState, HashSet<DFAState> visited)
{
List<DFAState> dfaStates = new List<DFAState>();
visited.Add(startState);
if (startState.Equals(targetState))
{
dfaStates.Add(targetState);
return dfaStates;
}
// for (Edge e : startState.edges) { // walk edges looking for valid
// path
for (int i = 0; i < startState.NumberOfTransitions; i++)
{
Transition e = startState.GetTransition(i);
if (!visited.Contains((DFAState)e.Target))
{
List<DFAState> path = GetAnyDFAPathToTarget((DFAState)e.Target, targetState, visited);
if (path != null)
{ // found path, we're done
dfaStates.Add(startState);
dfaStates.AddRange(path);
return dfaStates;
}
}
}
return null;
}