elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Laberinto C++
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Laberinto C++  (Leído 3,311 veces)
JCanseco7

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Laberinto C++
« 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++

Código
  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <iostream.h>
  4. #include <stdlib.h>
  5. #include <time.h>
  6.  
  7. int lab[11][11];
  8. int iniciocol=0, iniciofila=0, fincol=0, finfila=0, caminfila=0, camincol=0, decidir=0, pared=1, espacio=0;
  9.  
  10. main(){
  11. /*se asignan paredes*/
  12.   for(int i=0; i<12; i++){
  13.    for(int j=0; j<12;j++){
  14. lab[i][j] = pared;
  15.         }
  16.      }
  17.  
  18.  
  19. /*se genera el inicio*/
  20.   srand(time(NULL));
  21.   iniciocol = (1+rand()%(11-1));
  22.   if (iniciocol == 0) {
  23.     iniciofila = (1+rand()%(11-1));
  24.   } else {
  25.     iniciofila = 0;
  26.   }
  27.  
  28.   /*Asignamos la entrada y salida y declaramos para empezar a crear el camino*/
  29.   lab[iniciofila][iniciocol] = espacio;
  30.   caminfila = iniciofila++;
  31.   camincol = iniciocol;
  32.   lab[caminfila][camincol] = espacio;
  33.  
  34.   /*Creamos el camino*/
  35. while(caminfila < 11 && camincol < 11){
  36. decidir = rand()%4;
  37. if (decidir == 0){ /*camino se fabrica a la izquierda*/
  38. camincol = camincol-1;
  39. lab[caminfila][camincol] = espacio;
  40. } else if(decidir ==1 ) { /*camino para abajo*/
  41. caminfila++;
  42. lab[caminfila][camincol] = espacio; /*camino a la derecha*/
  43. } else if (decidir == 2){
  44. camincol++;
  45. lab[caminfila][camincol];
  46. }
  47.  
  48. }
  49.  
  50.   /*muestra el laberinto*/
  51.   for(int i=0; i<12; i++){
  52.     for(int j=0; j<12;j++){
  53. if(lab[i][j] == pared){
  54. cout<<"#";
  55. cout<<" ";
  56. } else {
  57. cout<<".";
  58. cout<<" ";
  59. }
  60.      }
  61.   cout<<"\n";
  62.   }
  63.   getchar();
  64. }


« Última modificación: 25 Septiembre 2016, 08:21 am por JCanseco7 » En línea

Nucleorion

Desconectado Desconectado

Mensajes: 72


Ver Perfil
Re: Laberinto C++
« Respuesta #1 en: 26 Septiembre 2016, 18:08 pm »

No entiendo lo que haces.

A mi compilando tu codigo me da esto:

Citar
# # # # # # # # # # # #
# # # # # # # # # # # #
# # # # # # # # # # # #
# # # # # # # # # # # #
# # # # # # # # # # # #
# # # # # # # # # # # #
# # # # # # # # # # # #
# # # # # # # # # # # #
# # # # # # # # # # # #
# # # # # # # # # # # #
# # # # # # # # # # # .
. # # # . . . # # # # #

Cual es el resultado esperado? No veo ningun camino en el laberinto


En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Laberinto C++
« Respuesta #2 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:
Código
  1. iniciocol = (1+rand()%(11-1));
  2. if (iniciocol == 0) {
  3.    iniciofila = (1+rand()%(11-1));
  4. } else {
  5.    iniciofila = 0;
  6. }

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%3

De 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.
En línea

JCanseco7

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Re: Laberinto C++
« Respuesta #3 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.
Código
  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <iostream.h>
  4. #include <stdlib.h>
  5. #include <time.h>
  6.  
  7. int lab[12][12];
  8. int iniciocol=0, iniciofila=0, caminfila=0, camincol=1, decidir=0, pared=1, espacio=0, yapaso=2, novolver=3;
  9.  
  10. main(){
  11. /*se asignan paredes*/
  12.   for(int i=0; i<12; i++){
  13.    for(int j=0; j<12;j++){
  14. lab[i][j] = pared;
  15.         }
  16.      }
  17.  
  18. /*se genera el inicio*/
  19. srand(time(NULL));
  20. iniciofila = (1+rand()%(6-1));
  21.  
  22. /*Asignamos la entrada y declaramos el pasillo de entrada*/
  23. lab[iniciofila][iniciocol] = espacio;
  24. caminfila = iniciofila;
  25. lab[caminfila][camincol] = espacio;
  26.  
  27.   /*Creamos el camino*/
  28. while(caminfila < 11 && camincol < 11){
  29. decidir = rand()%3;
  30. if (decidir == 0){ /*camino se fabrica a la izquierda*/
  31. camincol = camincol-1;
  32. if(camincol < 1){
  33. camincol = camincol+1;
  34. } else {
  35. lab[caminfila][camincol] = espacio;
  36. camincol++;
  37. }
  38. }
  39.  
  40.     if(decidir ==1 ) { /*camino para abajo*/
  41. caminfila++;
  42. lab[caminfila][camincol] = espacio;
  43. } else if (decidir == 2){   /*camino a la derecha*/
  44. camincol++;
  45. lab[caminfila][camincol] = espacio;
  46. }
  47.  
  48. }
  49.  
  50. /*Se crean caminos falsos*/
  51. for(int i=1; i<11; i++){
  52. for(int j=1;j<11;j++){
  53. if (lab[i][j] != espacio) {
  54. decidir = rand()%2;
  55. if(decidir==0){
  56. lab[i][j] = espacio;
  57. }
  58. }
  59. }
  60. }
  61.  
  62. /*Se resuelve el laberinto*/
  63. lab[iniciofila][iniciocol] = yapaso;
  64. caminfila = iniciofila;
  65. camincol = iniciocol;
  66. while(caminfila<12){
  67. if(lab[caminfila+1][camincol] == espacio){
  68. caminfila++;
  69. lab[caminfila][camincol] = yapaso;
  70. } else if(lab[caminfila][camincol+1] == espacio){
  71. camincol++;
  72. lab[caminfila][camincol] = yapaso;
  73. } else if(lab[caminfila-1][camincol] == espacio){
  74. caminfila--;
  75. lab[caminfila][camincol] = yapaso;
  76.  
  77. } else if(lab[caminfila][camincol-1] == espacio){
  78. camincol--;
  79. lab[caminfila][camincol] = yapaso;
  80. } else if((lab[caminfila+1][camincol] != espacio) && (lab[caminfila][camincol+1] != espacio) && (lab[caminfila-1][camincol] != espacio)){
  81. lab[caminfila][camincol] = novolver;
  82. camincol--;
  83. } else if((lab[caminfila+1][camincol] != espacio) && (lab[caminfila][camincol+1] != espacio) && (lab[caminfila][camincol-1] != espacio)){
  84. lab[caminfila][camincol] = novolver;
  85. caminfila--;
  86. } else if((lab[caminfila+1][camincol] != espacio) && (lab[caminfila][camincol+1] != espacio) && (lab[caminfila-1][camincol] != espacio)){
  87. lab[caminfila][camincol] = novolver;
  88. camincol++;
  89. } else if((lab[caminfila-1][camincol] != espacio) && (lab[caminfila][camincol+1] != espacio) && (lab[caminfila-1][camincol] != espacio)){
  90. lab[caminfila][camincol] = novolver;
  91. caminfila++;
  92. }
  93. }
  94.  
  95.  
  96.   /*muestra el laberinto*/
  97.   for(int i=0; i<12; i++){
  98.     for(int j=0; j<12;j++){
  99. if(lab[i][j] == pared){
  100. cout<<"#";
  101. cout<<" ";
  102. } else if((lab[i][j] == espacio) || lab(lab[i][j] == novolver)) {
  103. cout<<".";
  104. cout<<" ";
  105. } else if (lab[i][j] == yapaso){
  106. cout<<"X";
  107. cout<<" ";
  108. }
  109.  }
  110.   cout<<"\n";
  111.   }
  112.   getchar();
  113. }
En línea

Nucleorion

Desconectado Desconectado

Mensajes: 72


Ver Perfil
Re: Laberinto C++
« Respuesta #4 en: 30 Septiembre 2016, 11:05 am »

El la linea 102 tienes:

Código
  1. } else if((lab[i][j] == espacio) || lab(lab[i][j] == novolver)) {

Deberia ser:

Código
  1. } else if((lab[i][j] == espacio) || (lab[i][j] == novolver)) {

No?
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Laberinto en Php.
PHP
n3fisto 2 4,282 Último mensaje 20 Marzo 2010, 15:26 pm
por n3fisto
Backtracking - Laberinto
Programación C/C++
hadree 3 6,657 Último mensaje 23 Noviembre 2010, 03:08 am
por do-while
Juego del laberinto C
Programación C/C++
Rpgmakero 4 10,260 Último mensaje 4 Marzo 2011, 01:50 am
por N0body
Funciones en laberinto en C!
Programación C/C++
lalintians 2 2,801 Último mensaje 11 Mayo 2011, 03:10 am
por lalintians
Laberinto en C JUGABLE
Programación C/C++
MrCookie40 1 3,047 Último mensaje 29 Mayo 2017, 01:03 am
por engel lex
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines