public string NextTransition(DirectedTransitions _dt = null) { if (_dt == null) { _dt = dt; } return(reachableTransitions.FirstOrDefault(t => _dt.Test(t) && unplacedTransitions.Contains(t))); }
public string ForceTransition(DirectedTransitions _dt = null) { if (_dt == null) { _dt = dt; } List <string> candidateTransitions = new List <string>(); candidateTransitions.AddRange(unplacedTransitions); candidateTransitions.AddRange(standbyTransitions.Keys); candidateTransitions = candidateTransitions.Except(reachableTransitions).Where(transition => _dt.Test(transition)).ToList(); bool Test(string transition) { HashSet <string> tempProgression = FakeUpdateReachableTransitions(transition); tempProgression.Remove(transition); tempProgression.IntersectWith(candidateTransitions); return(tempProgression.Any()); } return(candidateTransitions.FirstOrDefault(t => Test(t))); }