viernes, 14 de agosto de 2015

Laberinto en java

Código aquí

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