private ArrayList getAllLocationsRec(){ ArrayList res = new ArrayList<>(); if (this.visited){ return res; } this.visited = true; res.add(this); for (int i = 0; i < this.neighbors.length; i++){ res.addAll(this.neighbors[i].getAllLocationsRec()); } return res; } public ArrayList getAllLocations(){ ArrayList res = this.getAllLocationsRec(); // reinitialize the locations for (int i = 0; i < res.size(); i++){ res.get(i).visited = false; } return res; } private ArrayList getAllEdgesRec(){ ArrayList res = new ArrayList<>(); if (this.visited){ return res; } this.visited = true; for (int i = 0; i < this.neighbors.length; i++){ if (!this.neighbors[i].visited) { Edge edge = new Edge(this, this.neighbors[i]); res.add(edge); } } for (int i = 0; i < this.neighbors.length; i++){ if (!this.neighbors[i].visited) { res.addAll(this.neighbors[i].getAllEdgesRec()); } } return res; } public ArrayList getAllEdges(){ ArrayList res = this.getAllEdgesRec(); // reinitialize the locations for (int i = 0; i < res.size(); i++){ res.get(i).getFrom().visited = false; res.get(i).getTo().visited = false; } return res; }