private void createAPath(Road neighbourRoad, Path path) { if (!path.contains(neighbourRoad)) { path.add(neighbourRoad); added.add(neighbourRoad); } addEntrances(path, neighbourRoad); for (Road road : roadHelper.getConnectedRoads(neighbourRoad.getID())) { if (entrances.contains(road) || added.contains(road)) { continue; } if (end || roadHelper.getConnectedRoads(neighbourRoad.getID()).size() == 1) { return; } if (headRoads.contains(road)) { if (!end) { end = true; if (!path.contains(road)) { path.add(road); } path.setEndOfPath(road); } } else if (!end) { createAPath(road, path); } } if (!end) { for (Road neighbourR : roadHelper.getConnectedRoads(neighbourRoad.getID())) { if (headRoads.contains(neighbourR)) { if (!path.contains(neighbourR)) { path.add(neighbourR); } path.setEndOfPath(neighbourR); end = true; } } } }