/*
  * initialize the number of nodes, and the empty vector of neighbors
  */
 public static void init(int s) {
   size = s;
   nodes = new Vector(size);
   neighborHistory = new Vector(size);
   neighborCurrent = new Vector(size);
   for (int i = 0; i < size; i++) {
     nodes.add(null);
     neighborHistory.add(null);
     neighborCurrent.add(null);
   }
 }
 /*
  * update neighborCurrent, based on the knowledge of the nodes
  */
 public static void updateCurrentNeighbor() {
   for (int i = 0; i < size; i++) {
     // add the neighbors for the ith node
     Vector nb = new Vector();
     for (int j = 0; j < size; j++) {
       if (i == j) continue;
       Location li = ((RouteGPSR) nodes.get(i)).getCurrentLocation();
       Location lj = ((RouteGPSR) nodes.get(j)).getCurrentLocation();
       if (distance(li, lj) < JistExperiment.market_radius) {
         nb.add(j);
       }
     }
     neighborCurrent.set(i, nb);
   }
 }
 /*
  * deep copy from current neighbors to history neighbors
  */
 public static void currentToHistory() {
   // neighborHistory = neighborCurrent;
   for (int i = 0; i < size; i++) {
     Vector currN = (Vector) neighborCurrent.get(i);
     Vector histN = new Vector();
     for (int j = 0; j < currN.size(); j++) {
       int temp = (Integer) currN.get(j);
       histN.add(temp);
     }
     neighborHistory.set(i, histN);
   }
 }
 /*
  * find the new appeared neighbors by comparing the current neighbor with the history
  */
 public static Vector findNewNeighbor(int pos) {
   Vector result = new Vector();
   Vector cur = (Vector) neighborCurrent.get(pos);
   Vector his = (Vector) neighborHistory.get(pos);
   if (his == null || his.size() == 0) return cur;
   for (int i = 0; i < cur.size(); i++) {
     if (!his.contains(cur.get(i))) {
       result.add(cur.get(i));
     }
   }
   return result;
 }
 public static void updateNodes(int i, RouteGPSR rm) {
   nodes.set(i, rm);
 }