Dev - C++ - No logro que se detenga mi laberinto en la salida

   
Vista:
Imágen de perfil de Luis

No logro que se detenga mi laberinto en la salida

Publicado por Luis luisrodriguez@ciencias.unam.mx (5 intervenciones) el 11/04/2014 22:16:06
No logro que se detenga mi laberinto en la salida, lo recorre solo, pero se regresa al inicio luego de recorrerlo!
Ya puse 3 comandos, donde debería detenerse y se sigue: Es en esta parte del código en el whie


if (A[ahora.i-1][ahora.j]==SALIDA ||A[ahora.i][ahora.j+1]==SALIDA)
{
break;
return 0;
system("pause");
}

else

-----------------------------------------------------------------------------------------------------------------------------------------------



#include <winbgim.h>
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>
#define N 21
#define D 20
#define H 10
#define ENTRADA 4
#define SALIDA 3
#define CAMINO 0
#define PARED 1
#define CUERDA 2
#define MALO 5

typedef struct{ //abre type//
int i;
int j;
} punto;
//cierra type//
typedef struct Nodo { //abre type//
punto info;
struct Nodo *sig;
} nodo; //cierra type//

typedef nodo *pila;
void inicializa(pila *p);
void push(pila *p, punto e);
punto pop(pila *p);
punto stack(pila *p);
nodo* creaNodo(punto e);
int esvacia(pila p);
void marca_camino(int A[N][N], int i, int j);
punto buscaEntrada(int A[N][N]);


void dibujaCamino(int A[N][N]);
pila laberinto(int A[N][N], punto ini);

main()
{ /*1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 */ //abre main//
int A[N][N]= {{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},//1
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},//2
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},//3
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},//4
{1,1,1,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,1,1},//5
{1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1,1,1,1,1},//6
{1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,0,1,1,1,1,1},//7
{1,1,1,1,1,1,1,1,1,0,0,0,0,0,1,0,1,1,1,1,1},//8
{1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1,1,1},//9
{3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1},//10
{1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1},//11
{1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1},//12
{1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1},//13
{1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1},//14
{1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1},//15
{1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,1,1,1,1,1,1},//16
{1,1,1,1,1,1,1,1,1,0,0,1,0,0,1,1,1,1,1,1,1},//17
{1,1,1,1,1,1,1,1,0,0,1,1,1,0,0,1,1,1,1,1,1},//18
{1,1,1,1,1,1,1,0,0,1,1,1,1,1,0,0,1,1,1,1,1},//19
{1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,0,1,1,1,1,1},//20
{1,1,1,1,1,1,4,1,1,1,1,1,1,1,1,1,1,1,1,1,1}};//21

punto inicio;
inicio = buscaEntrada(A);
pila p;
inicializa (&p);

initwindow(800,800);
dibujaCamino(A);
p = laberinto(A, inicio);
getch();
} //cierra main//

void dibujaCamino(int A[N][N])

{ //abre void//
int i,j;
for(i=0;i<N;i++)
{ //abre for 1//
for(j=0;j<N;j++)
{ //abre for 2//
if(A[i][j]== PARED)
{ //abre if //
setfillstyle(1,WHITE);
bar(H+(D*j),H+(D*i),(H+D)+(D*j),(H+D)+(D*i));
} //cierra if//

if(A[i][j]== CAMINO)
{ //abre if//
setfillstyle(1,LIGHTBLUE);
bar(H+(D*j),H+(D*i),(H+D)+(D*j),(H+D)+(D*i));
} //cierra if//

if(A[i][j]== ENTRADA)
{ //abre if//
setfillstyle(1,BLUE);
bar(H+(D*j),H+(D*i),(H+D)+(D*j),(H+D)+(D*i));
} //cierra if//

if(A[i][j]== SALIDA)
{ //abre if//
setfillstyle(1,BLUE);
bar(H+(D*j),H+(D*i),(H+D)+(D*j),(H+D)+(D*i));
} //cierra if//

} //cierra for 2//

} //cierra for 1//

} //cierra void//

void inicializa(pila *p)
{ //abre void//
*p = NULL;
} //cierra void//

void push (pila *p, punto e)
{ //abre void//
nodo *m;
m= creaNodo(e);
if(*p==NULL)
{ //abre if//
*p=m;
return;
} //cierra if//
m->sig=*p;
*p=m;
} //cierra void//

punto pop(pila *p)
{ //abre punto//
nodo *aux;
punto e;
aux=*p;
*p= (*p)->sig;
e= aux->info;
free(aux);
return e;
} //cierra punto//

punto stack(pila p)
{ //abre punto//
return p->info;
} //cierra punto//

nodo* creaNodo(punto e)
{ //abre nodo//
nodo *n;
n= (nodo*)malloc(sizeof(nodo));
if(n==NULL)
{ //abre if//
printf("error");
exit(1);
} //cierra if//
n->info=e;
n->sig=NULL;
return n;
} //cierra nodo//

int esvacia(pila p)
{ //abre esvacia//
return p==NULL;
} //cierra esvacia//

pila laberinto(int A[N][N], punto ini) /*--------------------------*/
{ //abre laberinto//
punto ahora, nuevo;
pila p;
inicializa(&p);
push(&p, ini);

while (!esvacia(p))
{ //abre while//
ahora=stack(p);

if (A[ahora.i-1][ahora.j]==SALIDA ||A[ahora.i][ahora.j+1]==SALIDA)
{
break;
return 0;
system("pause");
}

else
{ //abre else//
if(ahora.i-1>=0 && A[ahora.i-1][ahora.j]==CAMINO)
{ //abre if//
nuevo=ahora;
nuevo.i--;
push(&p, nuevo);
A[nuevo.i][nuevo.j]=CUERDA;

} //cierra if//
else if (ahora.j+1<=N && A[ahora.i][ahora.j+1]==CAMINO)
{ //abre else if//
nuevo=ahora;
nuevo.j++;
push(&p, nuevo);
A[nuevo.i][nuevo.j]=CUERDA;
} //cierra else if//
else if (ahora.i+1<=N && A[ahora.i+1][ahora.j]==CAMINO)
{ //abre else if//
nuevo=ahora;
nuevo.i++;
push(&p, nuevo);
A[nuevo.i][nuevo.j]=CUERDA;
} //cierra else if//
else if (ahora.j-1>=0 && A[ahora.i][ahora.j-1]==CAMINO)
{ //abre else if//
nuevo=ahora;
nuevo.j--;
push(&p, nuevo);
A[nuevo.i][nuevo.j]=CUERDA;
} //cierra else if//
else
{ //abre else//
ahora = pop(&p);
A[ahora.i][ahora.j]= MALO;
marca_camino(A, ahora.i, ahora.j);
} //cierra else//
} //cierra else//
marca_camino(A,nuevo.i, nuevo.j);
} //cierra while//
return p;
} //cierra laberinto//
/*--------------------------*/


void marca_camino(int A[N][N], int i, int j)
{ //abre void//
if (A[i][j]==MALO)
{ //abre if//
setfillstyle(1,GREEN);
bar(H+(D*j),H+(D*i),(H+D)+(D*j),(H+D)+(D*i));
} //cierra if//

if (A[i][j]==CUERDA)
{ //abre if//
setfillstyle(1,YELLOW);
bar(H+(D*j),H+(D*i),(H+D)+(D*j),(H+D)+(D*i));
} //cierra if//

delay(100);
} //cierra void//
punto buscaEntrada(int A[N][N]) /*-----------------------------*/
{ //abre busca entrada//
punto entrada;
int i,j;

for(i=0; i<N; i++)
{ //abre for 1
for(j=0; j<N; j++) //abre for 2
{
if (A[i][j]==ENTRADA)
{ entrada. i=i; //abre if//
entrada. j=j;
break;
} //cierra if//
} //cierra for 2//
} //cierra for 1//
return entrada;
} //cierra buscaentrada//
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder