Red de conocimiento informático - Programación de la red - Por favor, ayúdenme con una pregunta sobre programación de estructuras de datos. El tema es el uso de pilas para resolver problemas de laberintos.

Por favor, ayúdenme con una pregunta sobre programación de estructuras de datos. El tema es el uso de pilas para resolver problemas de laberintos.

Nota: Los siguientes son tres archivos: la definición y declaración de la pila (archivo de encabezado), la implementación de la pila y el problema del laberinto.

/* Representación secuencial de la pila: declaración de función de tipo e interfaz*/

enum { MAXNUM = 20 /* El número máximo de elementos en la pila debe definirse según sea necesario*/

};

typedef int DataType; /* El tipo de elementos en la pila debe definirse según sea necesario*/

struct SeqStack { /* Tipo de pila secuencial definición*/

int t; /* indicación de la posición superior de la pila*/

Tipo de datos s[MAXNUM];

};

typedef struct SeqStack SeqSack, *PSeqStack; /* Tipo de pila secuencial y tipo de puntero*/

/*Crea una pila vacía, solicita espacio para la estructura de la pila y asigna el valor de la variable superior a - 1*/

PSeqStack createEmptyStack_seq( void);

/* Determina si la pila señalada por pastack es una pila vacía. Cuando la pila señalada por pastack es una pila vacía, devuelve 1. , de lo contrario, devuelve 0*/

int isEmptyStack_seq( PSeqStack pastack);

/* Empuja un elemento x en la pila */

void push_seq( PSeqStack pastack , DataType x);

/* Eliminar el elemento superior de la pila*/

void pop_seq( PSeqStack pastack);

/* Cuando la pila apunta por pastack no es una pila vacía, busque la parte superior de la pila Valor del elemento*/

DataType top_seq( PSeqStack pastack);

/* Representación secuencial de la pila: definición de función*/

#include lt; stdio.hgt ;

#include lt;stdlib.hgt;

#include "sstack.h"

/*Cree una pila vacía; solicite espacio para la estructura de la pila y asigne el valor de la variable superior de la pila a -1*/

PSeqStack createEmptyStack_seq( void ) {

PSeqStack pastack = (PSeqStack)malloc(sizeof(struct SeqStack));

if (pastack==NULL)

printf("¡¡Sin espacio!! \n") ;

else

pastack-gt;t = -1;

devolver pastack; /* Determinar si la pila apuntada por pastack es una pila vacía, cuando la pila apuntada por pastack es una pila vacía, devuelve 1; de lo contrario, devuelve 0*/

int isEmptyStack_seq( PSeqStack pastack) {

return pastack-gt; t == -1

}

/* Empujar un elemento x en la pila */

void push_seq (Pastack PSeqStack, tipo de datos x) {

if( pastack-gt; t gt; = MAXNUM - 1 )

printf( "¡Desbordamiento de pila! \n"

else {

pastack- gt;t;

pastack-gt;s[pastack-gt;t] = x;

}

}

/ * Eliminar el elemento superior de la pila*/

void pop_seq( PSeqStack pastack) {

if (pastack-gt; t == -1)

printf( " ¡Desbordamiento inferior!\n" );

else

pastack-gt

}

/* Cuando pastack es Cuando la pila se refiere a no ser una pila vacía, busque el valor del elemento superior de la pila*/

DataType top_seq( PSeqStack pastack) {

return pastack- gt; s[pastack-gt; t ];

}

/* Algoritmo no recursivo para el problema del laberinto (implementación de pila)*/

#define MAXNUM 100/* Número máximo de elementos en la pila */

#define N 11 /*La longitud de la primera dimensión del mapa*/

#include stdio.hgt;

#include lt; stdlib .hgt;

typedef struct {

int x;/* subíndice de fila*/

int y ;/* subíndice de columna*/

int d;/* Dirección de movimiento*/

} DataType;

struct SeqStack { /* Definición de tipo de pila secuencial* /

int t ; /* Indica la posición superior de la pila*/

DataType s[MAXNUM];

};

typedef struct SeqStack *PSeqStack /* Tipo de pila secuencial Tipo de puntero */

PSeqStack pastack /* pastack es una variable de puntero que apunta a la pila de secuencia*/

PSeqStack createEmptyStack_seq( void ) {

PSeqStack pastack;

pastack = (PSeqStack)malloc(sizeof(struct SeqStack));

if (pastack == NULL)

printf("¡¡Sin espacio!! \n");

else

pastack-gt; t = -1; pastack;

}

int isEmptyStack_seq( PSeqStack pastack ) {

>

return pastack-gt; t == -1

}

/* Empujar un elemento x en la pila */

void push_seq ( PSeqStack pastack, Tipo de datos x) {

if( pastack-gt;t gt;= MAXNUM - 1)

printf( "Overflow! \n" );

else {

pastack-gt;t;

pastack-gt;s[pastack-gt;t] = x;

}< / p>

}

/* Eliminar el elemento superior de la pila*/

void pop_seq( PSeqStack pastack) {

if (pastack-gt ; t == -1 )

printf( "Underflow!\n"

else

pastack-gt; >

}

/* Cuando la pila a la que apunta pastack no es una pila vacía, encuentre el valor del elemento superior de la pila*/

DataType top_seq( PSeqStack pastack) {

return (pastack-gt; s[pastack-gt; t]);

}

void pushtostack(PSeqStack st, int x, int y, int d) {

elemento tipo de datos;

elemento.x = x;

elemento.y = y; elemento.d = d;

push_seq(st, elemento);

}

void printpath(PSeqStack st) {

Tipo de datos element;

printf("La ruta inversa es:\n"); /* Imprime cada punto de la ruta*/

while(!isEmptyStack_seq(st)) {

elemento = top_seq(st);

pop_seq(st);

printf("el nodo es: d d \n", elemento.x, elemento.y );

}

}

/* Encuentra un camino desde el laberinto de entrada[x1][y1] hasta el laberinto de salida[x2][y2] en el laberinto laberinto[M][N] Camino */

/* donde 1lt;=x1,x2lt;=M-2, 1lt;=y1,y2lt;=N-2 */

void mazePath(int laberinto [][N], int dirección[][2], int x1, int y1, int x2, int y2) {

int i, j, k ,

g, h;

PSeqStack st;

elemento de tipo de datos;

st = createEmptyStack_seq(

laberinto[x1][y1); ] = 2; /* Ingresar desde la entrada, marcar */

pushtostack(st, x1, y1, -1 /* Empujar el punto de entrada a la pila*/

while ( !isEmptyStack_seq(st)) { /* Cuando no hay camino por recorrer, retrocede paso a paso*/

element = top_seq(st);

pop_seq( st);

i = elemento.x; j = elemento.y;

for (k = elemento.d 1; k lt; = 3; k) { /* Prueba cada dirección por turno*/

g = i dirección[k][0]; h = j dirección[k][1]

if (g == x2 amp; amp; h == y2 amp ;amp; maze[g][h] == 0) { /* Ir al punto de salida*/

printpath(st /* Imprimir ruta*/

return;

}

if (laberinto[g][h] == 0) { /* Ve a un punto que aún no has caminado* /

laberinto[g ][h] = 2; /* marca*/

pushtostack(st, i, j, k /* empujar a la pila*/

i = g; j = h; k = -1; /* Convertir el siguiente punto al punto actual*/

}

}

}

printf( "No se ha encontrado la ruta.\n");/* No se ha encontrado la ruta después de salir de la pila*/

}

int main(){

int dirección[][2]={0,1,1,0,0,-1,-1,0};

int laberinto[][N] = {

1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,

1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1,

1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1,

1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1,

1, 0, 0, 0, 1, 0, 1,

1, 0, 1, 1,

1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1,

1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1,

1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1

};

laberintoPath(laberinto, dirección, 1, 1, 6, 9)

getchar()

devuelve 0;

}