private static void trip(String mapFileName) {
        Reader mapParser = null;
        try {
            mapParser = new FileReader(mapFileName);
        } catch (FileNotFoundException e) {
            throw new RuntimeException("No file found");
        }
        makeMap(mapParser);

        Scanner reqParser = new Scanner(System.in);
        _requests = new ArrayList<Graph<Location, Distance>.Vertex>();
        while (reqParser.hasNext()) {
            String next = reqParser.next();
            next = trim(next);
            if (!_locs.containsKey(next)) {
                reqParser.close();
                throw new RuntimeException("Destination not established");
            }
            _requests.add(_locs.get(next));
        }
        reqParser.close();
        if (_requests.size() < 2) {
            throw new RuntimeException("Too few locations specified");
        }

        System.out.println("From " + _requests.get(0).getLabel().name() + ":");
        System.out.println();

        _count = 1;
        Distancer<Location> heuristic = new StraightLineHeur();
        for (int i = 0; i < _requests.size() - 1; i++) {
            Graph<Location, Distance>.Vertex v0 = _requests.get(i);
            Graph<Location, Distance>.Vertex v1 = _requests.get(i + 1);
            List<Graph<Location, Distance>.Edge> bestPath =
                    Graphs.shortestPath(_map, v0, v1, heuristic);
            if (v1.getLabel().weight() == Double.POSITIVE_INFINITY) {
                throw new RuntimeException("Destination unreachable");
            }
            outputRoad(bestPath, v1);
        }
    }