コード例 #1
0
 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);
     }
   }
 }