public void processPoint(Coordinate coord, Route route, Integer accum, Integer objective)
            throws EndException, RouteException {
        if (!route.contains(coord)) {
            Route newRoute = new Route(route);
            newRoute.add(coord);
            accum += pointValue(coord);
            if (isLast(coord)) {
                if (accum.equals(objective)) {
                    throw new EndException("Objective reached ("+newRoute.size()+" steps):", newRoute);
                } else {
                    throw new RouteException("Got to last position without the correct amount (" + accum + ")");
                }
            }
            if (accum > objective) {
                throw new RouteException("Passed the correct amount without being in the last position (" + accum + ")");
            }
            for (Iterator<Coordinate> iNeighbours = getNeighbours(coord).iterator(); iNeighbours.hasNext();) {
                try {
                    processPoint(iNeighbours.next(), newRoute, accum, objective);
                } catch (RouteException re) {
                    if (flagDebug) {
                        System.out.println(re.getMessage());
                    }
                } catch (EndException ee) {
                    if (flagAll) {
                        routeList.add(ee.getRoute());
                    } else {
                        throw ee;
                    }
                }
            }
        }
    }