ayuda con un laberinto pasarlo todo a apuntadores lo q se pueda
Publicado por carlos (1 intervención) el 16/07/2011 20:52:06
#include <iostream>
using namespace std;
#define x 12
#define y 12
#define t 4
time_t t1,t2;
float i;
enum Direccion { ABAJO, DERECHA, ARRIBA, IZQUIERDA };
const int x0 = 2, y0 = 0; // coordenada de inicio laberinto
void laberintoTraversal( char [][ y ], int, int, int );
void mostrarlabe( const char[][ y ] );
bool valimovi( const char [][ y ], int, int );
bool coorlabe( int, int );
int main()
{
char laberinto[ x ][ y ]=
{
{'#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#'},
{'#', '.', '.', '.', '#', '.', '.', '.', '.', '.', '.', '#'},
{'.', '.', '#', '.', '#', '.', '#', '#', '#', '#', '.', '#'},
{'#', '#', '#', '.', '#', '.', '.', '.', '.', '#', '.', '#'},
{'#', '#', '.', '.', '.', '#', '#', '#', '.', '#', '.', '#'},
{'#', '#', '.', '#', '.', '#', '.', '#', '.', '#', '.', '#'},
{'#', '#', '.', '#', '#', '#', '.', '#', '.', '#', '.', '#'},
{'#', '#', '.', '#', '.', '#', '.', '#', '.', '#', '.', '#'},
{'#', '.', '.', '#', '.', '.', '.', '.', '.', '#', '.', '#'},
{'#', '.', '#', '#', '#', '#', '.', '#', '#', '#', '.', '#'},
{'#', '.', '.', '.', '.', '.', '.', '#', '.', '#', '.', '#'},
{'#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#'}
};
laberintoTraversal( laberinto, x0, y0, DERECHA );
return 0;
}
// Supongamos que hay exactamente 1 entrada y exactamente 1 salida al laberinto.
void laberintoTraversal( char laberinto[][ y ], int xCoord, int yCoord, int direccion )
{
static bool bandera = false;
laberinto[ xCoord ][ yCoord ] = 'x';
mostrarlabe(laberinto);
if ( coorlabe(xCoord, yCoord) && ((xCoord != x0) && (yCoord != y0)) ) {
cout << "\n Laberinto salido con éxito!\n\n";
return; // laberinto es completa
}
else
if ( xCoord == x0 && yCoord == x0 && bandera ) {
cout << "\nVolvió a la ubicación de inicio.\n\n";
return;
}
else {
bandera = true;
for ( int mover = direccion, cont = 0; cont < t; cont++,++mover, mover %= t )
switch( mover ) {
case IZQUIERDA:
if ( valimovi( laberinto, xCoord, yCoord - 1 ) ) { // mover izquierda
laberintoTraversal( laberinto, xCoord, yCoord - 1, ARRIBA );
return;
}
break;
case DERECHA:
if ( valimovi( laberinto, xCoord, yCoord + 1 ) ) { // mover a la derecha
laberintoTraversal( laberinto, xCoord, yCoord + 1, ABAJO );
return;
}
break;
case ARRIBA:
if ( valimovi( laberinto, xCoord - 1, yCoord ) ) { // mover hacia arriba
laberintoTraversal( laberinto, xCoord - 1, yCoord, DERECHA );
return;
}
break;
case ABAJO:
if ( valimovi( laberinto, xCoord + 1, yCoord) ) { // mover hacia abajo
laberintoTraversal( laberinto, xCoord + 1, yCoord, IZQUIERDA );
return;
}
break;
}
}
}
bool valimovi( const char laberinto[][ y ], int r, int c )
{
return ( r >= 0 && r <= 11 && c >= 0 && c <= 11 && laberinto[ r ][ c ] != '#' );
}
bool coorlabe( int a, int b )
{
if ( ( a == 0 || a == 11 ) && ( b >= 0 && b <= 11 ) )
return true;
else if ( ( b == 0 || b == 11 ) && ( a >= 0 && a <= 11 ) )
return true;
else
return false;
}
void mostrarlabe( const char laberinto[][ y ] )
{
for ( int a = 0; a < x; ++a ) {
for ( int b = 0; b < y; ++b )
cout <<laberinto[ a ][ b ]<< ' ';
cout << '\n';
}
cout << "\n exitoso regreso a ver el siguiente movimiento\n";
time(&t1);
for (i=1;i<=70000;i=i+0.007)
time(&t2);
system("cls");
}
using namespace std;
#define x 12
#define y 12
#define t 4
time_t t1,t2;
float i;
enum Direccion { ABAJO, DERECHA, ARRIBA, IZQUIERDA };
const int x0 = 2, y0 = 0; // coordenada de inicio laberinto
void laberintoTraversal( char [][ y ], int, int, int );
void mostrarlabe( const char[][ y ] );
bool valimovi( const char [][ y ], int, int );
bool coorlabe( int, int );
int main()
{
char laberinto[ x ][ y ]=
{
{'#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#'},
{'#', '.', '.', '.', '#', '.', '.', '.', '.', '.', '.', '#'},
{'.', '.', '#', '.', '#', '.', '#', '#', '#', '#', '.', '#'},
{'#', '#', '#', '.', '#', '.', '.', '.', '.', '#', '.', '#'},
{'#', '#', '.', '.', '.', '#', '#', '#', '.', '#', '.', '#'},
{'#', '#', '.', '#', '.', '#', '.', '#', '.', '#', '.', '#'},
{'#', '#', '.', '#', '#', '#', '.', '#', '.', '#', '.', '#'},
{'#', '#', '.', '#', '.', '#', '.', '#', '.', '#', '.', '#'},
{'#', '.', '.', '#', '.', '.', '.', '.', '.', '#', '.', '#'},
{'#', '.', '#', '#', '#', '#', '.', '#', '#', '#', '.', '#'},
{'#', '.', '.', '.', '.', '.', '.', '#', '.', '#', '.', '#'},
{'#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#'}
};
laberintoTraversal( laberinto, x0, y0, DERECHA );
return 0;
}
// Supongamos que hay exactamente 1 entrada y exactamente 1 salida al laberinto.
void laberintoTraversal( char laberinto[][ y ], int xCoord, int yCoord, int direccion )
{
static bool bandera = false;
laberinto[ xCoord ][ yCoord ] = 'x';
mostrarlabe(laberinto);
if ( coorlabe(xCoord, yCoord) && ((xCoord != x0) && (yCoord != y0)) ) {
cout << "\n Laberinto salido con éxito!\n\n";
return; // laberinto es completa
}
else
if ( xCoord == x0 && yCoord == x0 && bandera ) {
cout << "\nVolvió a la ubicación de inicio.\n\n";
return;
}
else {
bandera = true;
for ( int mover = direccion, cont = 0; cont < t; cont++,++mover, mover %= t )
switch( mover ) {
case IZQUIERDA:
if ( valimovi( laberinto, xCoord, yCoord - 1 ) ) { // mover izquierda
laberintoTraversal( laberinto, xCoord, yCoord - 1, ARRIBA );
return;
}
break;
case DERECHA:
if ( valimovi( laberinto, xCoord, yCoord + 1 ) ) { // mover a la derecha
laberintoTraversal( laberinto, xCoord, yCoord + 1, ABAJO );
return;
}
break;
case ARRIBA:
if ( valimovi( laberinto, xCoord - 1, yCoord ) ) { // mover hacia arriba
laberintoTraversal( laberinto, xCoord - 1, yCoord, DERECHA );
return;
}
break;
case ABAJO:
if ( valimovi( laberinto, xCoord + 1, yCoord) ) { // mover hacia abajo
laberintoTraversal( laberinto, xCoord + 1, yCoord, IZQUIERDA );
return;
}
break;
}
}
}
bool valimovi( const char laberinto[][ y ], int r, int c )
{
return ( r >= 0 && r <= 11 && c >= 0 && c <= 11 && laberinto[ r ][ c ] != '#' );
}
bool coorlabe( int a, int b )
{
if ( ( a == 0 || a == 11 ) && ( b >= 0 && b <= 11 ) )
return true;
else if ( ( b == 0 || b == 11 ) && ( a >= 0 && a <= 11 ) )
return true;
else
return false;
}
void mostrarlabe( const char laberinto[][ y ] )
{
for ( int a = 0; a < x; ++a ) {
for ( int b = 0; b < y; ++b )
cout <<laberinto[ a ][ b ]<< ' ';
cout << '\n';
}
cout << "\n exitoso regreso a ver el siguiente movimiento\n";
time(&t1);
for (i=1;i<=70000;i=i+0.007)
time(&t2);
system("cls");
}
Valora esta pregunta
0