private static bool HasPath(object adjacentRingA, object adjacentRingB, SimpleGraph <object> graph) { HashSet <object> visited = new HashSet <object>(); bool more = true; List <object> actives = new List <object>(); List <object> newActives = new List <object>(); actives.Add(adjacentRingB); while (more) { more = false; foreach (object cur in actives) { visited.Add(cur); object[] items = graph.GetAdjacent(cur); foreach (object o in items) { if (object.ReferenceEquals(o, adjacentRingA)) { return(true); } if (visited.Add(o)) { more = true; newActives.Add(o); } } } actives = newActives; newActives.Clear(); } return(false); }