Beispiel #1
0
  /*
   * Do a breadth-first search starting at (x,z) and return
   * when a grid position's value = 0.
   */
  public Vertex search(int x, int z) {
    this.queue = new LinkedList<Vertex>();
    Vertex v = new Vertex(x, z);
    v.markAsVisited();
    queue.add(v);
    // System.out.println("Added and marked v at: (" + x + ", " + z + ")");

    while (!queue.isEmpty()) {
      Vertex t = queue.remove(0);
      if (grid.getStatus(t.posX(), t.posZ()) == 0) {
        System.out.println("Found 0 at: (" + t.posX() + ", " + t.posZ() + ")");
        return t;
      }

      ArrayList<Vertex> adjacents = getAdjacents(t);
      for (Vertex u : adjacents) {
        if (!u.marked()) {
          u.markAsVisited();
          queue.add(u);
          // System.out.println("Added and marked u at: (" + u.posX() + ", " + u.posZ() + ")");
        }
      }
    }

    return null;
  }
Beispiel #2
0
  private ArrayList<Vertex> getAdjacents(Vertex v) {
    ArrayList<Vertex> adj = new ArrayList<Vertex>();
    Vertex t;
    if (v.posX() != 0 && v.posZ() != maxZ && grid.getStatus(v.posX() - 1, v.posZ() + 1) != 2) {
      t = new Vertex(v.posX() - 1, v.posZ() + 1);
      adj.add(t);
    }
    if (v.posZ() != maxZ && grid.getStatus(v.posX(), v.posZ() + 1) != 2) {
      t = new Vertex(v.posX() + 1, v.posZ() + 1);
      adj.add(t);
    }
    if (v.posX() != maxX && v.posZ() != maxZ && grid.getStatus(v.posX() + 1, v.posZ() + 1) != 2) {
      t = new Vertex(v.posX() + 1, v.posZ() + 1);
      adj.add(t);
    }
    if (v.posX() != 0 && grid.getStatus(v.posX() - 1, v.posZ()) != 2) {
      t = new Vertex(v.posX() - 1, v.posZ());
      adj.add(t);
    }
    if (grid.getStatus(v.posX(), v.posZ()) != 2) {
      t = new Vertex(v.posX(), v.posZ());
      adj.add(t);
    }
    if (v.posX() != maxX && grid.getStatus(v.posX() + 1, v.posZ()) != 2) {
      t = new Vertex(v.posX() + 1, v.posZ());
      adj.add(t);
    }
    if (v.posX() != 0 && v.posZ() != 0 && grid.getStatus(v.posX() - 1, v.posZ() - 1) != 2) {
      t = new Vertex(v.posX() - 1, v.posZ() - 1);
      adj.add(t);
    }
    if (v.posZ() != 0 && grid.getStatus(v.posX(), v.posZ() - 1) != 2) {
      t = new Vertex(v.posX(), v.posZ() - 1);
      adj.add(t);
    }
    if (v.posX() != maxX && v.posZ() != 0 && grid.getStatus(v.posX() + 1, v.posZ() - 1) != 2) {
      t = new Vertex(v.posX() + 1, v.posZ() - 1);
      adj.add(t);
    }

    return adj;
  }