Hola amigos, espero y se encuentren bien, queria saber si me pueden ayudar, necesito hacer un backtraking de laberinto tengo q leer un txt, y guardarlo en un arreglo bidimensional y luego hacer la busqueda mas corta, ya tengo la parte donde lee el txt if(tecla==KeyEvent.VK_G){
try { File f= new File ("laberinto.txt"); FileWriter abrir = new FileWriter (f,false); PrintWriter salida = new PrintWriter(abrir); int elementos =19; for (int i=0; i< rectangulos.size();i++){ if(rectangulos.get(i).getColor()==Color.BLACK){ salida.print("1"); } else if(rectangulos.get(i).getColor()==Color.RED){ salida.print("s"); } else if(rectangulos.get(i).getColor()==Color.GREEN){ salida.print("e"); } else{ salida.print("0"); } if(i==elementos){ elementos+=20; salida.println(""); }
private static char L = 'L'; // pared private static char E = '0'; // espacio en blanco private static char MARCA = '*'; // señala las posiciones visitadas private static int x0 = 1; // inicio X private static int y0 = 0; // inicio Y /* * private static int xf = 11; // salida X private static int yf = 20; // * salida Y */
private static ObtenerTxt txt = new ObtenerTxt();
public static boolean valida(int f, int c) { // controla si la posicion esta fuera del laberinto if (f < 0 || f == txt.inicioFila || c < 0 || c == txt.inicioColumna) { return false; } // controla si la posicion ya fue visitada o es muro if (txt.getLectura()[f][c] == MARCA || txt.getLectura()[f][c] == L) { return false; } return true; }
public static boolean recorre(int fil, int col) { boolean listo = false; // Indica si se ha encontrado la salida // Se marca la casilla como visitada txt.getLectura()[fil][col] = MARCA; // Condicion de termino de recursividad: " Llegamos a la salida ?" if (fil == txt.finFila - 2 && col == txt.finColumna - 1) { return (true); } if (!listo && valida(fil - 1, col)) { /* Intento hacia arriba */ listo = recorre(fil - 1, col); } if (!listo && valida(fil, col + 1)) { /* Intento a la derecha */ listo = recorre(fil, col + 1); } if (!listo && valida(fil + 1, col)) { /* Intento hacia abajo */ listo = recorre(fil + 1, col); } if (!listo && valida(fil, col - 1)) { /* Intento a la izquierda */ listo = recorre(fil, col - 1); }
if (!listo) { txt.getLectura()[fil][col] = E; } // Se retorna true / false dependiendo de si se encontro solucion return (listo); }
public static void desplegarArreglo(char[][] matriz) { for (int i = 0; i < matriz.length; ++i) { String texto = new String(""); for (int j = 0; j < matriz.length; ++j) { texto += matriz[i][j] + " "; } System.out.println(texto); } } } pero al momento de querer buscar no logro que me muestre elr esultado, espero y me puedan orientar. gracias
este es mi txt. LLLLLLLLLLLLLLL L0000000000000L L0000000000000L L0000000000000L L0000000000000L L0000000000000L L00000s0000000L L0000000000000L L0000000000000L L000000000e000L L0000000000000L L0000000000000L L0000000000000L L0000000000000L LLLLLLLLLLLLLLL
Hola amigos, espero y se encuentren bien, queria saber si me pueden ayudar, necesito hacer un backtraking de laberinto tengo q leer un txt, y guardarlo en un arreglo bidimensional y luego hacer la busqueda mas corta, ya tengo la parte donde lee el txt
if(tecla==KeyEvent.VK_G){
try {
File f= new File ("laberinto.txt");
FileWriter abrir = new FileWriter (f,false);
PrintWriter salida = new PrintWriter(abrir);
int elementos =19;
for (int i=0; i< rectangulos.size();i++){
if(rectangulos.get(i).getColor()==Color.BLACK){
salida.print("1");
}
else if(rectangulos.get(i).getColor()==Color.RED){
salida.print("s");
}
else if(rectangulos.get(i).getColor()==Color.GREEN){
salida.print("e");
}
else{
salida.print("0");
}
if(i==elementos){
elementos+=20;
salida.println("");
}
}
System.out.println("");
salida.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
y la parte de busqueda
public class Laberinto {
private static char L = 'L'; // pared
private static char E = '0'; // espacio en blanco
private static char MARCA = '*'; // señala las posiciones visitadas
private static int x0 = 1; // inicio X
private static int y0 = 0; // inicio Y
/*
* private static int xf = 11; // salida X private static int yf = 20; //
* salida Y
*/
private static ObtenerTxt txt = new ObtenerTxt();
public static boolean valida(int f, int c) {
// controla si la posicion esta fuera del laberinto
if (f < 0 || f == txt.inicioFila || c < 0 || c == txt.inicioColumna) {
return false;
}
// controla si la posicion ya fue visitada o es muro
if (txt.getLectura()[f][c] == MARCA || txt.getLectura()[f][c] == L) {
return false;
}
return true;
}
public static boolean recorre(int fil, int col) {
boolean listo = false; // Indica si se ha encontrado la salida
// Se marca la casilla como visitada
txt.getLectura()[fil][col] = MARCA;
// Condicion de termino de recursividad: " Llegamos a la salida ?"
if (fil == txt.finFila - 2 && col == txt.finColumna - 1) {
return (true);
}
if (!listo && valida(fil - 1, col)) { /* Intento hacia arriba */
listo = recorre(fil - 1, col);
}
if (!listo && valida(fil, col + 1)) { /* Intento a la derecha */
listo = recorre(fil, col + 1);
}
if (!listo && valida(fil + 1, col)) { /* Intento hacia abajo */
listo = recorre(fil + 1, col);
}
if (!listo && valida(fil, col - 1)) { /* Intento a la izquierda */
listo = recorre(fil, col - 1);
}
if (!listo) {
txt.getLectura()[fil][col] = E;
}
// Se retorna true / false dependiendo de si se encontro solucion
return (listo);
}
public static void main(String[] args) {
System.out.println("LABERINTO PROPUESTO:");
desplegarArreglo(txt.lectura);
System.out.println("LABERINTO RESUELTO");
recorre(x0, y0);
desplegarArreglo(txt.lectura);
}
public static void desplegarArreglo(char[][] matriz) {
for (int i = 0; i < matriz.length; ++i) {
String texto = new String("");
for (int j = 0; j < matriz.length; ++j) {
texto += matriz[i][j] + " ";
}
System.out.println(texto);
}
}
}
pero al momento de querer buscar no logro que me muestre elr esultado, espero y me puedan orientar. gracias
este es mi txt.
LLLLLLLLLLLLLLL
L0000000000000L
L0000000000000L
L0000000000000L
L0000000000000L
L0000000000000L
L00000s0000000L
L0000000000000L
L0000000000000L
L000000000e000L
L0000000000000L
L0000000000000L
L0000000000000L
L0000000000000L
LLLLLLLLLLLLLLL
la parte e = entrada, s= salida.