Red de conocimiento informático - Material del sitio web - Pila: Problema con las ratas del laberinto, hay algún problema con el programa, ¡por favor ayuda!

Pila: Problema con las ratas del laberinto, hay algún problema con el programa, ¡por favor ayuda!

Su método es demasiado complicado. Es más sencillo utilizar el método de retroceso. Primero ponga while((stack!=NULL)||((stack-gt; row!=x2)amp;amp;(stack-gt;col! = y2)){Cambiar a while(1)try en lugar de if. El siguiente método es el anterior. Puedes echarle un vistazo.

#stdio.hgt;

#includelt ;stdlib.hgt;

#define N 50

int **laberinto;

int fila;

int col ;

int col; p>

int stack[50];//pila donde se almacenan las rutas

void CreateMaze()//se usa para crear dinámicamente un laberinto

{

int i, j;

printf("Ingrese el número de filas en el laberinto. ");

Ingrese el número de filas en el laberinto: ");

scanf("d", & fila);

printf("Ingrese el número de columnas del laberinto: ");

scanf("d", amp; col);

if(rowlt;=0||collt;=0)

{

printf("¡Las filas o columnas de entrada no se ajustan a la regla!\n");

exit(1);

}

/ / Utilice punteros para crear dinámicamente matrices bidimensionales

maze=(int **)malloc((row 2)*sizeof(int *)); ;ilt;fila 2;i)

{

laberinto[i]=(int *)malloc((col 2)*sizeof(int));

}

// Agregar pared lateral

for(i=0;ilt;row 2;i)

{

laberinto[i][ 0]=1;

laberinto[i][col 1]=1;

}

for(i=0; ilt ; col 2; i )

{

if(i==1)

{

laberinto[0][i] =0;

}

p>

else laberinto[0][i]=1;

if(i==col)

{

laberinto[fila 1] [col]=0;

}

otro laberinto[fila 1][i]=1 ;

}

for( i=1; ilt; =fila; i )

{

for(j=1; jlt; =col; j )

{

printf("Ingrese el d dígito de la d-ésima fila:\n",i,j);

scanf("d",amp;laberinto[i][j]);

p>}

}

/// Ingrese al siguiente laberinto y agregue paredes laterales al laberinto actual para verificar si la entrada es correcta

printf(" Entrada completada. El laberinto actual con paredes laterales es:\n");

for(i=0; ilt; fila 2; i )

{

for (j=0;jlt;col 2;j)

{

printf("d", laberinto[i][j]);

}

printf("/n");

}

}

void ShowMaze()//Laberinto de salida

{

int i,j;

for(i=1;ilt;=row;i)

{

for(j=1;jlt;=col;j)

{

printf("d", laberinto[i][j]);

}

printf("\n");

}

}

}

Implemente la pista inversa en la dirección para encontrar la ruta de solución del laberinto

int FindPath()

{

int i, j, k, count, x , y, dirección;

cuenta=0;

x=1, y=1

dirección=0; =0, k=0 ;

for(i=0;ilt;N;i)

{

pila[i]=0;

}

i=0;

mientras(1)

{

count=0;

if( x==1amp;amp;y==1)

laberinto[x][y]=2;

if(laberinto[x][y 1]==0) //este

{

cuenta;

laberinto[x][y 1]=2;

y=y 1;

pila[i]=-1;

i

if(x==filaamp;y==col; )

return 1;

}

else if(laberinto[x 1][y]==0)//Sur

{

if(laberinto[x 1][y]==0)

cuenta ;

{

laberinto[x 1][y]= 2;

x=x 1;

pila[i]=-2;

i;

if(x== filaamp;amp;y==col)

return 1;

}

}

si no (laberinto[x][ y-1]==0)//oeste

{

cuenta;

if(laberinto[x][y- 1]==0)

{

laberinto[x][y-1]=2

y=y-1;

pila[i ]=-3;

i

if(x==fila;amp;y==col)

devuelve 1 ;

}

}

si no(laberinto[

x-1][y]==0)//norte

{

cuenta;

if(laberinto[x-1][y]= =0)

{

laberinto[x- 1][y]=2;

x=x-1;

pila[i]=-4;

i;

if(x==rowamp;amp;y==col)

devuelve 1;

p>

}

}

}

si(count==0)

{

if(ilt; 0)

return 0;

dirección=pila[i--];

cambiar(dirección)

{

caso -1: y=y- 1; ruptura;

caso-2: x=x-1;

caso-3: y=y 1; romper

caso-4: x=x 1;

}

}

}

int main()

{

CreateMaze();

if(FindPath())

{

printf("Se ha encontrado una ruta de la siguiente manera:\n");

ShowMaze ();

}

else

{

printf("No hay un camino adecuado para salir de ¡el laberinto actual!\ n");

}

DestroyMaze();

}