Título: Laberinto C++
Publicado por: JCanseco7 en 25 Septiembre 2016, 08:03 am
¿Alguien me podría ayudar con este código? Necesito que se genere solo una entrada y una salida. En el código actual se genera más de un camino a la vez y necesito que sea solo uno conectado con la entrada y salida. :-\ Agrego: Estoy compilando en Borland C++ #include <stdio.h> #include <conio.h> #include <iostream.h> #include <stdlib.h> #include <time.h> int lab[11][11]; int iniciocol=0, iniciofila=0, fincol=0, finfila=0, caminfila=0, camincol=0, decidir=0, pared=1, espacio=0; main(){ /*se asignan paredes*/ for(int i=0; i<12; i++){ for(int j=0; j<12;j++){ lab[i][j] = pared; } } /*se genera el inicio*/ srand(time(NULL)); iniciocol = (1+rand()%(11-1)); if (iniciocol == 0) { iniciofila = (1+rand()%(11-1)); } else { iniciofila = 0; } /*Asignamos la entrada y salida y declaramos para empezar a crear el camino*/ lab[iniciofila][iniciocol] = espacio; caminfila = iniciofila++; camincol = iniciocol; lab[caminfila][camincol] = espacio; /*Creamos el camino*/ while(caminfila < 11 && camincol < 11){ decidir = rand()%4; if (decidir == 0){ /*camino se fabrica a la izquierda*/ camincol = camincol-1; lab[caminfila][camincol] = espacio; } else if(decidir ==1 ) { /*camino para abajo*/ caminfila++; lab[caminfila][camincol] = espacio; /*camino a la derecha*/ } else if (decidir == 2){ camincol++; lab[caminfila][camincol]; } } /*muestra el laberinto*/ for(int i=0; i<12; i++){ for(int j=0; j<12;j++){ if(lab[i][j] == pared){ cout<<"#"; cout<<" "; } else { cout<<"."; cout<<" "; } } cout<<"\n"; } getchar(); }
Título: Re: Laberinto C++
Publicado por: Nucleorion en 26 Septiembre 2016, 18:08 pm
No entiendo lo que haces. A mi compilando tu codigo me da esto: # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . # # # . . . # # # # # Cual es el resultado esperado? No veo ningun camino en el laberinto
Título: Re: Laberinto C++
Publicado por: MAFUS en 26 Septiembre 2016, 20:12 pm
Vale, muchas cosas: No compruebas que estás en los bordes del laberinto, que significa que habrías salido. Solo haces una comprobación en el while(caminfila < 11 && camincol < 11) de que no estás fuera de las dimensiones de la tabla. Las operaciones de inicio del camino están un poco mal. Tu dices: iniciocol = (1+rand()%(11-1));if (iniciocol == 0) { iniciofila = (1+rand()%(11-1));} else { iniciofila = 0; }
inicioco nunca valdrá 0 puesto que ese 1+... ya hace que el valor sea al menos 1, con lo que nunca se entrará en el else. De igual forma 1+rand()%(11-1) puede darse el caso de que valga 11 con lo que estarías en la esquina del laberinto, y al poder moverte solamente Sur, Este, Oeste, cualquier movimiento que hicieras te dejaría a la salida del laberinto. Realmente te sobran variables: iniciocol, iniciofila, fincol, finfila están de más. Puedes empezar solo con camincol y caminfila e ir actualizándolas. En 'Creamos el camino' la operación decidir = rand%4 está mal porqué después en la elección de opciones solo tienes en cuenta los números del 0 al 2, entonces debería ser decidir = rand%3De igual forma ahí la estructura if - else la puedes sustituir por un switch y aclararás el código, además de usar la estructura correcta para el propósito que buscas. En 'se asignan paredes' y 'muestra el laberinto' te sales de los límites de la tabla. Deberías moverte desde 0 hasta 10 y te mueves de 0 hasta 11, tanto en horizontal como en vertical.
Título: Re: Laberinto C++
Publicado por: JCanseco7 en 30 Septiembre 2016, 08:30 am
Bueno, gracias por la ayuda, hice varias modificaciones y ahora ya consigo que me genere un camino, pero ahora que lo ejecuto no me muestra automáticamente la solución. #include <stdio.h> #include <conio.h> #include <iostream.h> #include <stdlib.h> #include <time.h> int lab[12][12]; int iniciocol=0, iniciofila=0, caminfila=0, camincol=1, decidir=0, pared=1, espacio=0, yapaso=2, novolver=3; main(){ /*se asignan paredes*/ for(int i=0; i<12; i++){ for(int j=0; j<12;j++){ lab[i][j] = pared; } } /*se genera el inicio*/ srand(time(NULL)); iniciofila = (1+rand()%(6-1)); /*Asignamos la entrada y declaramos el pasillo de entrada*/ lab[iniciofila][iniciocol] = espacio; caminfila = iniciofila; lab[caminfila][camincol] = espacio; /*Creamos el camino*/ while(caminfila < 11 && camincol < 11){ decidir = rand()%3; if (decidir == 0){ /*camino se fabrica a la izquierda*/ camincol = camincol-1; if(camincol < 1){ camincol = camincol+1; } else { lab[caminfila][camincol] = espacio; camincol++; } } if(decidir ==1 ) { /*camino para abajo*/ caminfila++; lab[caminfila][camincol] = espacio; } else if (decidir == 2){ /*camino a la derecha*/ camincol++; lab[caminfila][camincol] = espacio; } } /*Se crean caminos falsos*/ for(int i=1; i<11; i++){ for(int j=1;j<11;j++){ if (lab[i][j] != espacio) { decidir = rand()%2; if(decidir==0){ lab[i][j] = espacio; } } } } /*Se resuelve el laberinto*/ lab[iniciofila][iniciocol] = yapaso; caminfila = iniciofila; camincol = iniciocol; while(caminfila<12){ if(lab[caminfila+1][camincol] == espacio){ caminfila++; lab[caminfila][camincol] = yapaso; } else if(lab[caminfila][camincol+1] == espacio){ camincol++; lab[caminfila][camincol] = yapaso; } else if(lab[caminfila-1][camincol] == espacio){ caminfila--; lab[caminfila][camincol] = yapaso; } else if(lab[caminfila][camincol-1] == espacio){ camincol--; lab[caminfila][camincol] = yapaso; } else if((lab[caminfila+1][camincol] != espacio) && (lab[caminfila][camincol+1] != espacio) && (lab[caminfila-1][camincol] != espacio)){ lab[caminfila][camincol] = novolver; camincol--; } else if((lab[caminfila+1][camincol] != espacio) && (lab[caminfila][camincol+1] != espacio) && (lab[caminfila][camincol-1] != espacio)){ lab[caminfila][camincol] = novolver; caminfila--; } else if((lab[caminfila+1][camincol] != espacio) && (lab[caminfila][camincol+1] != espacio) && (lab[caminfila-1][camincol] != espacio)){ lab[caminfila][camincol] = novolver; camincol++; } else if((lab[caminfila-1][camincol] != espacio) && (lab[caminfila][camincol+1] != espacio) && (lab[caminfila-1][camincol] != espacio)){ lab[caminfila][camincol] = novolver; caminfila++; } } /*muestra el laberinto*/ for(int i=0; i<12; i++){ for(int j=0; j<12;j++){ if(lab[i][j] == pared){ cout<<"#"; cout<<" "; } else if((lab[i][j] == espacio) || lab(lab[i][j] == novolver)) { cout<<"."; cout<<" "; } else if (lab[i][j] == yapaso){ cout<<"X"; cout<<" "; } } cout<<"\n"; } getchar(); }
Título: Re: Laberinto C++
Publicado por: Nucleorion en 30 Septiembre 2016, 11:05 am
El la linea 102 tienes: } else if((lab[i][j] == espacio) || lab(lab[i][j] == novolver)) {
Deberia ser: } else if((lab[i][j] == espacio) || (lab[i][j] == novolver)) {
No?
|