private HashMap<String, HashMap<String, LSA>> getShortestGraph() {
		HashMap<String, HashMap<String, LSA>> result = new HashMap<String, HashMap<String, LSA>>();

		PriorityQueue<VertexCandidate> candidates = new PriorityQueue<VertexCandidate>();

		candidates.add(new VertexCandidate(myRootRouterID, null, null, 0));

		while (!candidates.isEmpty()) {
			VertexCandidate vertex = candidates.poll();
			result.put(vertex.myVertextID, new HashMap<String, LSA>());
			if (vertex.myPreviousVertex != null) {
				HashMap<String, LSA> edges = result.get(vertex.myPreviousVertex);
				edges.put(vertex.myVertextID, vertex.myEdge);
			}

			if (myDataBate.containsKey(vertex.myVertextID)) {
				for (LSA lsa : myDataBate.get(vertex.myVertextID)) {
					String vertexID = lsa.getDestinationID();
					if (result.containsKey(vertexID)) {
						continue;
					}
					VertexCandidate candidate = findCandidate(candidates, vertexID);
					if (candidate == null) {
						candidates.add(new VertexCandidate(vertexID, vertex.myVertextID, lsa, vertex.myMetric
								+ lsa.myMetric));
					} else if (candidate.myMetric > vertex.myMetric + lsa.myMetric) {
						candidates.remove(candidate);
						candidates.add(new VertexCandidate(vertexID, vertex.myVertextID, lsa, vertex.myMetric
								+ lsa.myMetric));
					}
				}
			}
		}

		return result;
	}