Baixe o app para aproveitar ainda mais
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() + "]"); } } }
Compartilhar