private IEnumerable <UnitGraphEdgeSequence> findConversionSequence(UnitGraphEdgeSequence currentRoute, Unit target) { var sequences = new List <UnitGraphEdgeSequence>(); var to = currentRoute.Last.To; if (to.Equals(target)) { sequences.Add(currentRoute); return(sequences); } foreach (var c in unitGraph[to].Conversions) { if (currentRoute.References(c)) { continue; } var newRoute = currentRoute.Clone(); newRoute.Add(c); var innerSequences = findConversionSequence(newRoute, target); sequences.AddRange(innerSequences.Where(seq => seq.Last.To.Equals(target))); } return(sequences); }
public int CompareTo(UnitGraphEdgeSequence other) { return(edges.Count - other.edges.Count); }