Пример #1
0
  public ArrayList<MsgObjPath> getRoadKNN(int srcVID) {
    Vertex srcV = GraphPool.getSignleton().getVertex(srcVID);
    RNet leafR = RNetHierarchy.getSignleton().getRNet(srcV.getLeafRnetID());
    TreeSet<Path> queue = new TreeSet<Path>();
    TreeSet<MsgObjPath> settleSet = new TreeSet<MsgObjPath>();
    TreeSet<MsgObjPath> unSettleSet = new TreeSet<MsgObjPath>();

    boolean finish = false;

    if (leafR.hasMsgObjInside()) {
      Dijkstra dijkstra = new Dijkstra(leafR.getGraph());
      dijkstra.execute(srcVID);
      TreeSet<MsgObjPath> msgset = dijkstra.getPath2Objects(leafR);

      finish = doSettle(settleSet, unSettleSet, msgset);

      if (!finish) {
        TreeSet<MsgObjPath> borset = dijkstra.getPath2Borders(leafR);
        finish = doSettle(settleSet, unSettleSet, borset);
      }
    } else {
      Dijkstra dijkstra = new Dijkstra(leafR.getGraph());
      dijkstra.execute(srcVID);
      TreeSet<MsgObjPath> borset = dijkstra.getPath2Borders(leafR);
      finish = doSettle(settleSet, unSettleSet, borset);
    }

    TreeSet<ChoosePathUnit> pqueue = new TreeSet<ChoosePathUnit>();
    while (!finish) {
      MsgObjPath first = unSettleSet.pollFirst();
      int visitedLevel = first.currentVisitedRNetLevel;
      int vID = first.getTailVID();
      Vertex v = GraphPool.getSignleton().getVertex(vID);
      if (v.getHighestBorderLevel() < 0) {
        System.out.println("v must be a border");
        System.exit(0);
      }

      RNet highR =
          RNetHierarchy.getSignleton().getRNet(v.getInsideRNetID(v.getHighestBorderLevel()));

      if (!highR.isLeafRNet()) {
        ChoosePathUnit unit = new ChoosePathUnit();
        unit.rnet = highR.getRNetID();
        unit.path = first.clone();
        pqueue.add(unit);
      } else {
        /*leaf, search silbing*/
        List<Integer> nlist = v.getNeighbors();
        for (int i = 0; i < nlist.size(); i++) {
          Vertex anoV = GraphPool.getSignleton().getVertex(nlist.get(i));
        }
      }
    }

    return null;
  }