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; }