public double get_h_value(Vertex t) {
    ArrayList<Vertex> chems = G.getChemV();
    double ans = 0;
    double t_dis = (this.d).get_t_dis_in_dList(d_list, t.getIndex());

    int v_c_index;
    int v_index;
    double v_dis;
    double dis;

    for (int i = 0; i < chems.size(); i++) {
      // get the index of the vertex in chem ver
      v_c_index = (chems.get(i)).getIndex();
      // get the index of him in d_list
      v_index = (this.d).getIndexInList(this.d_list, v_c_index);
      // get his distance
      v_dis = ((this.d_list).get(v_index)).get_dis();
      // compute the distance between t and chems.get(i):
      dis = Math.abs(t_dis - v_dis);
      // inc the ans
      ans = ans + dis;
    }

    return ans * 2;
  }
 public double h() {
   double val = 0;
   Iterator<diikstra_ver> it = d_list.iterator();
   while (it.hasNext()) {
     diikstra_ver v = it.next();
     if (G.getVertex(v.get_index() - 1).hasChems()) {
       val += v.get_dis();
     }
   }
   return val;
 }
  public double get_f_value(Double H_value) {
    double ans = 0;

    ArrayList<Vertex> chems = G.getChemV();

    int v_c_index;
    int v_index;
    double v_dis;

    for (int i = 0; i < chems.size(); i++) {
      // get the index of the vertex in chem ver
      v_c_index = (chems.get(i)).getIndex();
      // get the index of him in d_list
      v_index = (this.d).getIndexInList(this.d_list, v_c_index);
      // get his distance
      v_dis = ((this.d_list).get(v_index)).get_dis();
      // we already know that d[s] = 0
      // therefore we only accumulate the d[v]
      ans = ans + v_dis;
    }
    return ans;
  }
 public RobotPuzzle(Graph g, int x, int y, int gx, int gy) {
   graph = g;
   location = g.getNode(x, y);
   goal = g.getNode(gx, gy);
   System.out.println();
 }