Buscar

BuscaHeuristica

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ia_exercicio01;
/**
 *
 * @author marco.silva2
 */
public class BuscaHeuristica extends Busca {
 Ponto[] p = new Ponto[8];
 public int x, y;
 @Override
 public boolean buscaH(int y, int x, int fimX, int fimY) {
 this.x = x;
 this.y = y;
 count++;
 System.out.println("Movimentos: " + count + "x vale: " + this.x + " y vale: " + this.y);
 //valida se a posição esta dentro da matriz
 if ((this.y < 0 && this.y >= col) && (this.x < 0 && this.x >= lin)) {
 return false;
 //verifica se a posição é um obstaculo
 } else if (matriz[this.y][this.x] == '#') {
 return false;
 //verifica se a posição já foi percorrida
 } else if (matriz[this.y][this.x] == '*') {
 return false;
 //verifica se a posição é a final
 } else if (matriz[this.y][this.x] == 'F') {
 matriz[this.y][this.x] = 'X';
 imprime();
 System.out.println("Movimentos: " + count);
 return true;
 } else {
 p = sequencia(p, this.x, this.y);
 matrizContaImprime(this.x, this.y);
 for (int i = 0; i < 8; i++) {
 int X = p[i].getA();
 int Y = p[i].getB();
 if (buscaH(Y, X, fimX, fimY)) {
 return true;
 }
 }
 }
 return false;
 }
 public void matrizContaImprime(int x, int y) {
 matriz[y][x] = '*';
 //count++;
 imprime();
 }
 @Override
 public boolean busca(int i, int k) {
 throw new UnsupportedOperationException("Não implementado ainda.");
 }
 public Ponto[] sequencia(Ponto[] p, int x, int y) {
 System.out.println(x + " e " + y);
 for (int i = 0; i < 8; i++) {
 p[i] = new Ponto();
 }
 int cont = 0;
 if (x < col - 1) {
 p[cont].setA(x + 1);
 p[cont].setB(y);
 cont++;
 }
 if (x < col - 1 && y > 0) {
 p[cont].setA(x + 1);
 p[cont].setB(y - 1);
 cont++;
 }
 if (x < col - 1 && y < lin - 1) {
 p[cont].setA(x + 1);
 p[cont].setB(y + 1);
 cont++;
 }
 if (y < lin - 1) {
 p[cont].setA(x);
 p[cont].setB(y + 1);
 cont++;
 }
 if (y > 0) {
 p[cont].setA(x);
 p[cont].setB(y - 1);
 cont++;
 }
 if (y < lin - 1 && x > 0) {
 p[cont].setA(x - 1);
 p[cont].setB(y + 1);
 cont++;
 }
 if (x > 0) {
 p[cont].setA(x - 1);
 p[cont].setB(y);
 cont++;
 }
 if (y > 0 && x > 0) {
 p[cont].setA(x - 1);
 p[cont].setB(y - 1);
 cont++;
 }
 int paran = cont;
 for (int i = cont - 1; i > -1; i--) {
 p[i].setDistancia(p[i].hipotenusa(fimx, fimy));
 }
 Ordena(p, paran);
 return p;
 }
 public void verifica(int x, int y) {
 for (int i = y - 1; i < y + 2; i++) {
 for (int j = x; j < x + 2; j++) {
 if (j == 0) {
 System.out.print("|" + matriz[i][j] + "|");
 } else {
 System.out.print(matriz[i][j] + "|");
 }
 }
 System.out.println();
 }
 }
 public void Ordena(Ponto[] p, int cont) {
 for (int i = cont - 1; i > -1; i--) {
 for (int j = cont - 1; j > -1; j--) {
// p[i].setDistancia(p[i].hipotenusa(fimx, fimy));
// p[j].setDistancia(p[i].hipotenusa(fimx, fimy));
 if (p[i].getDistancia() > p[j].getDistancia()) {
 Ponto aux = p[i];
 p[i] = p[j];
 p[j] = aux;
 } else if (p[i].getDistancia() == p[j].getDistancia()) {
 if (p[i].getB() < p[j].getB()) { // se as distancias forem iguais, da preferencia para a posição cujo valor de Y seja maior, ou seja, mais abaixo.
 Ponto aux = p[j];
 p[j] = p[i];
 p[i] = aux;
 }
 }
 }
 }
 for (int i = cont - 1; i > -1; i--) {
 System.out.println("[ distancia = " + p[i].getDistancia() + "]");
 }
 }
}

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Continue navegando