Foros del Web » Programación para mayores de 30 ;) » C/C++ »

duda con Vueltra atrás

Estas en el tema de duda con Vueltra atrás en el foro de C/C++ en Foros del Web. Holaa! siento molestar otra vez, pero ya comprendí la programación dinámica asi que me puse con vuelta atrás. He elaborado un ejercicio (el típico del ...
  #1 (permalink)  
Antiguo 22/09/2011, 13:35
 
Fecha de Ingreso: septiembre-2011
Mensajes: 6
Antigüedad: 12 años, 7 meses
Puntos: 1
duda con Vueltra atrás

Holaa! siento molestar otra vez, pero ya comprendí la programación dinámica asi que me puse con vuelta atrás. He elaborado un ejercicio (el típico del laberinto) pero no consigo de hacerlo funcionar.

Gracias a todos! estoy aprendiendo mucho en este foro!

Aquí dejo el código, hay algunos procedimientos que no son muy refinados, como el de pintar la matriz, pero me da igual porque mi interés es en el backtraquing, el resto de código me da igual.



// Incluir E/S y Librerías Standard
#include <iostream>
#include <cstdlib>
#include <string>
#include <fstream>

using namespace std;


// Zona de Declaración de Constantes
// Zona de Declaración de Tipos

const unsigned int fil = 50;
const unsigned int col =50;
typedef int TMatriz[fil][col];
typedef int TVector[4];



// Zona de Cabeceras de Procedimientos y Funciones
char menu();
bool Confirmar();
void Pintar(TMatriz &m);
void Mostrar(TMatriz m);
void MovimientosPos (TVector &mov_fil,TVector &mov_col);
void Laberinto(TMatriz &lab,int k,int fil,int col,TVector mov_col,TVector mov_fil,bool exito);

// Programa Principal
int main()
{
// Zona de Declaración de Variables del Programa principal
char op;
bool salir;

salir = false;

TMatriz lab;
string nom;
TVector f,c;
int fil,col,k;
bool exito;


while(!salir)
{

op = menu();
cout << endl;

switch(op)
{
case 'A': Pintar(lab);
Mostrar(lab);
break;
case 'B': MovimientosPos (f,c);
Laberinto(lab,1,0,0,c,f,exito);
Mostrar(lab);
break;
case 'C':
break;
case 'X': salir = Confirmar();
cout << endl << endl;
break;
default: cout << " Opcion Incorrecta ..." << endl;
cout << endl;
break;
}


system("Pause"); // Hacer una pausa
system("cls"); // Borrar Pantalla
}

return 0; // Valor de retorno al S.O.
}

// Implementación de Procedimientos y Funciones
char menu()
{
char op;


cout << " LABERINTO" << endl;
cout << " =============" << endl;
cout << " A. Crear Laberinto." << endl;
cout << " B. Llegar al final." << endl;



cout << " X. Salir del Programa" << endl;
cout << endl;
cout << " Introduzca su opcion: " ;

cin >> op;
cin.ignore();
op = toupper(op);

return op;

}

bool Confirmar()
{
char car;

cout << "?Esta seguro(S/N)?";
cin >> car;
cin.ignore();
car = toupper(car);

return (car=='S');
}//fin confirmar




void Mostrar(TMatriz m)
{
int i,j;
for(i=0;i<50;i++)
{
for(j=0;j<50;j++)
{
cout << m[i][j];
}
cout << endl;
}

}//fin mostrar


void Laberinto(TMatriz &lab,int k,int fil,int col,TVector mov_col,TVector mov_fil,bool exito)
{
//variables
int orden;

//inicio
orden=0;
exito=false;
cout << "ORDEN: "<<orden<<endl;
do
{
orden=orden+1;
fil=fil + mov_fil[orden];
col=col + mov_col[orden];cout <<"orden: "<< orden << endl;
system("PAUSE");
if ((0<=fil) && (fil<=49) && (0<=col) && (col<=49) && (lab[fil][col]==0) )
{cout << fil << col << lab[fil][col] <<k<<endl;
lab[fil][col]=k;
if ((fil==49) && (col==49))
{
exito=true;
}
else
{//cout << k << endl;
Laberinto(lab,k+1,fil,col,mov_col,mov_fil,exito);
if (!exito)
{
lab[fil][col]=0;
}
}
}
fil=fil - mov_fil[orden];
col=col - mov_col[orden];
// orden=orden+1;
}while((exito) && (orden==4));

}//fin laberinto


void MovimientosPos (TVector &mov_fil,TVector &mov_col)
{
mov_fil[0]=1; mov_col[0]=0; // sur
mov_fil[1]=0; mov_col[1]=1; //este
mov_fil[2]=0; mov_col[2]=-1; //oeste
mov_fil[3]=-1; mov_col[3]=0; //norte
}//fin movimientos




void Pintar(TMatriz &m)
{
int i,j;
for(i=0;i<50;i++)
{
for(j=0;j<50;j++)
{
m[i][j]=1;
}

}

for(i=0;i<12;i++)
{
m[i][0]=0;
}

for(i=0;i<6;i++)
{
m[11][i]=0;
}

for(i=7;i<12;i++)
{
m[i][5]=0;
}

for(i=5;i<8;i++)
{
m[7][i]=0;
}

for(i=7;i<24;i++)
{
m[i][7]=0;
}

for(i=7;i<19;i++)
{
m[23][i]=0;
}

for(i=4;i<24;i++)
{
m[i][18]=0;
}


for(i=18;i<23;i++)
{
m[4][i]=0;
}

for(i=4;i<23;i++)
{
m[i][22]=0;
}


for(i=22;i<27;i++)
{
m[23][i]=0;
}

for(i=23;i<50;i++)
{
m[i][26]=0;
}

for(i=26;i<50;i++)
{
m[49][i]=0;
}
}//fin pintar
  #2 (permalink)  
Antiguo 22/09/2011, 15:37
 
Fecha de Ingreso: octubre-2010
Ubicación: Edo. de México
Mensajes: 94
Antigüedad: 13 años, 6 meses
Puntos: 9
Respuesta: duda con Vueltra atrás

¿Y tu duda es???
  #3 (permalink)  
Antiguo 22/09/2011, 16:02
 
Fecha de Ingreso: septiembre-2011
Mensajes: 6
Antigüedad: 12 años, 7 meses
Puntos: 1
Respuesta: duda con Vueltra atrás

Pues que no ejecuta correctamente, al entrar en el segundo bucle, me doy cuenta de que orden lo va incrementando, pero al llegar a la primera dirección a la derecha se queda pillado, a ver si alguien puede ayudarme a detectar el codigo.
Besos!

Etiquetas: const, funcion, programa
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 01:35.