//... public class Place { public Set reachablePlaces(){ Set discovered = new HashSet(); Queue worklist = new LinkedList(); discovered.add(this); worklist.add(this); while(!worklist.isEmpty()){ Place p = worklist.remove(); for(Place n : p.neighbors()){ if(!discovered.contains(n)){ discovered.add(n); worklist.add(n); } } } return discovered; } //... }