package ejercicio;
/**
*
* @author Sarurai
*/
public class Ejercicio {
public void imprime(char[][] lab) {
for (int i = 0; i < lab.length; i++) {
for (int j = 0; j < lab[1].length; j++) {
System.out.print(lab[i][j]);
}
System.out.println();
}
}
public char[][] generarLaberinto() {
int n = (int) (Math.random() * 12) + 3;
int m = (int) (Math.random() * 12) + 3;
char[][] lab = new char[n][m];
for (int i = 0; i < lab.length; i++) {
for (int j = 0; j < lab[1].length; j++) {
int ale = (int) (Math.random() * 2) + 1;
if (ale == 1) {
lab[i][j] = ' ';
} else {
lab[i][j] = '#';
}
}
}
int inicio1 = (int) (Math.random() * lab.length);
int inicio2 = (int) (Math.random() * lab[1].length);
lab[inicio1][inicio2] = '.';
return lab;
}
public boolean resuelveLab(char[][] lab) {
int x = 0;
int y = 0;
for (int i = 0; i < lab.length; i++) {
for (int j = 0; j < lab[1].length; j++) {
if (lab[i][j] == '.') {
y = i;
x = j;
}
}
}
return resuelve(lab, x, y);
}
private boolean resuelve(char[][] lab, int x, int y) {
lab[y][x] = '.';
if (x == 0 || y == 0 || x == lab[0].length - 1 || y == lab.length - 1) {
System.out.println("Encontrada soluciOn: ");
imprime(lab);
return true;
}
// Arriba
if (lab[y - 1][x] == ' ') {
boolean tmp = resuelve(lab, x, y - 1);
if (tmp == true) {
return true;
}
}
// abajo
if (lab[y + 1][x] == ' ') {
boolean tmp = resuelve(lab, x, y + 1);
if (tmp == true) {
return true;
}
}
// Izquierda
if (lab[y][x - 1] == ' ') {
boolean tmp = resuelve(lab, x - 1, y);
if (tmp == true) {
return true;
}
}
// Derecha
if (lab[y][x + 1] == ' ') {
boolean tmp = resuelve(lab, x + 1, y);
if (tmp == true) {
return true;
}
}
// Este camino no tiene solucion
lab[y][x] = ' ';
return false;
}
public static void main(String[] args) {
Ejercicio laberinto = new Ejercicio();
System.out.println("Laberinto generado: ");
char[][] lab = laberinto.generarLaberinto();
laberinto.imprime(lab);
boolean soluc = laberinto.resuelveLab(lab);
if (soluc == false) {
System.out.println("No se encontro solucion");
}
}
}
Captura
El punto indica donde comienza para encontrar una salida, el método generar laberinto es opcional puedes tu mandar tu matriz chart de cualquier tamaño.
No hay comentarios:
Publicar un comentario