private static List<Vertex> findShortestPath(Vertex a, Vertex b) {
        if (a.getAdjacentVertices().isEmpty()) {
            return Lists.newArrayList();
        } else if (a.getAdjacentVertices().contains(b)) {
            return Lists.newArrayList(a, b);
        } else {
            List<List<Vertex>> possiblePaths = Lists.newArrayList();
            for (Vertex vertex : a.getAdjacentVertices()) {
                possiblePaths.add(findShortestPath(vertex, b));
            }

            List<Vertex> shortestPath = Lists.newArrayList();
            if (!possiblePaths.isEmpty()) {
                for (List<Vertex> possiblePath : possiblePaths) {
                    if (shortestPath.isEmpty() || (possiblePath.size() < shortestPath.size() && !possiblePath.isEmpty())) {
                        shortestPath = possiblePath;
                    }
                }
            }

            if (!shortestPath.isEmpty()) {
                shortestPath.add(0, a);
            }
            return shortestPath;
        }
    }