Ver Mensaje Individual
  #1 (permalink)  
Antiguo 22/09/2011, 13:35
Sofita
 
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