private List<LocationVertex> path(LocationVertex from, LocationVertex to) {

            LocationVertex vertex = from;
            beforePathCalculation(vertex);

            List<LocationVertex> workingQueue = new LinkedList<LocationVertex>();
            workingQueue.add(vertex);
            while (!workingQueue.isEmpty()) {
                vertex = workingQueue.get(0);
                for (LocationVertex child : vertex.getNearests()) {
                    if (child.getWeight() > vertex.getWeight() + 1) {
                        child.setWeight(vertex.getWeight() + 1);
                        workingQueue.add(child);
                    }
                }
                workingQueue.remove(0);
            }

            LinkedList<LocationVertex> results = new LinkedList<LocationVertex>();
            LocationVertex toVertex = to;
            while (!toVertex.equals(from)) {
                results.addFirst(toVertex);
                for (LocationVertex elem : toVertex.getNearests())
                    if (elem.getWeight() == toVertex.getWeight() - 1) {
                        toVertex = elem;
                        break;
                    }
            }
            results.addFirst(from);

            afterPathCalculation();

            return results;
        }