private void ChoosePath( TreeSet<VisitedObject> queue, Vertex popVertex, double dist, HashSet<Integer> visitedN, HashSet<Integer> visitedO) { // TODO Auto-generated method stub int leafRID = popVertex.getLeafRnetID(); RNet leafRnet = RNetHierarchy.getSignleton().getRNet(leafRID); int leafLevel = leafRnet.getLevel(); if (popVertex.isBorderNode(leafLevel)) { int highestLevel = popVertex.getHighestBorderLevel(); for (int i = highestLevel; i <= leafLevel; i++) { int tmpRID = popVertex.getInsideRNetID(i); RNet tmpRNet = RNetHierarchy.getSignleton().getRNet(tmpRID); if (tmpRNet.hasMsgObjInside()) { if (tmpRNet.isLeafRNet()) { List<Integer> neighbors = popVertex.getNeighbors(); for (int j = 0; j < neighbors.size(); j++) { int id = neighbors.get(j).intValue(); Edge e = GraphPool.getSignleton().getEdge(popVertex.getId(), id); double newDist = dist + e.getWeight(); VisitedObject oneObj = new VisitedObject(id, -1, newDist); queue.add(oneObj); } } continue; } else { ShortCutSet scSet = tmpRNet.getShortCutSet(popVertex.getId()); if (scSet == null) break; HashMap<Integer, Path> scMap = scSet.getSCMap(); Iterator<Integer> scMIter = scMap.keySet().iterator(); while (scMIter.hasNext()) { Integer destID = (Integer) scMIter.next(); double newDist = dist + scMap.get(destID).cost; VisitedObject oneObj = new VisitedObject(destID.intValue(), -1, newDist); queue.add(oneObj); } List<Integer> neighbors = popVertex.getNeighbors(); for (int j = 0; j < neighbors.size(); j++) { int id = neighbors.get(j).intValue(); Vertex neiVertex = GraphPool.getSignleton().getVertex(id); if (neiVertex.getInsideRNetID(i) != popVertex.getInsideRNetID(i)) { Edge e = GraphPool.getSignleton().getEdge(popVertex.getId(), id); double newDist = dist + e.getWeight(); VisitedObject oneObj = new VisitedObject(id, -1, newDist); queue.add(oneObj); } } break; } } } else { List<Integer> neighbors = popVertex.getNeighbors(); for (int i = 0; i < neighbors.size(); i++) { int id = neighbors.get(i).intValue(); Edge e = GraphPool.getSignleton().getEdge(popVertex.getId(), id); double newDist = dist + e.getWeight(); VisitedObject oneObj = new VisitedObject(id, -1, newDist); queue.add(oneObj); } } }