Código fuente del laberinto de bolas
¿Ver texto impreso en el portapapeles?
# include ltstdio.h gt
# include ltstdlib.h gt
#define MAXNUM 100/*Número máximo de elementos en la pila*/ p >
#Definición N 11 /*La longitud de la primera dimensión del mapa*/¿Ver texto sin formato, copiarlo al portapapeles e imprimir?
# include ltstdio.h gt
# include ltstdlib.h gt
#define MAXNUM 100/*Número máximo de elementos en la pila*/ p >
#Definición N 11 /*La longitud de la primera dimensión del mapa*/
estructura typedef {
int x /*Subíndice de fila*/
int y;/*Subíndice de columna*/
int d;/*Dirección del movimiento*/
}Tipo de datos;
Struct SeqStack {/ *Definición del tipo de pila de secuencia*/
int t /*Indica la posición de la parte superior de la pila*/
Tipo de datos s[MAXNUM];
};
typedef struct seq stack * PSeqStack; /*tipo de puntero de tipo de pila secuencial*/
PSeqStack pastack/* pastack es una variable de puntero que apunta a la pila secuencial*/
PSeqStack createEmptyStack _ seq(void){
PSeqStack pastack
pastack =(PSeqStack)malloc(sizeof(struct seq stack));
if (pastack == NULL)
printf("¡¡Espacio insuficiente!!\n");
Otros
pastack- gt; -1;
Devolver pastack
}
int isEmptyStack _ seq(PSeqStack pastack){
Devolver pastack- gt;t = =-1;
p>}
/*Empujar un elemento x */
void push_seq( PSeqStack pastack, tipo de datos x) {
if(pastack- gt;t gt= MAXNUM - 1)
printf("Overflow! \n ");
De lo contrario {
pastack-gt;t;
p>
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("¡Desbordamiento inferior! \n ");
Otros
pastack- gt;t-;
}
/*Cuando la pila apuntada por pastack no Cuando está vacío, busque el valor del elemento superior de la pila*/
Tipo de datos top_seq( PSeqStack pastack) {
return(pastack- gt;s
[pastack- gt;t]);
}
void pushtostack(PSeqStack st, int x, int y, int d) {
Elemento de tipo de datos ;
elemento.x = x
elemento.y = y
elemento.d = d
push_seq(st, elemento) ;
}
void printpath(PSeqStack st) {
Elemento de tipo de datos;
printf("\n \nLa ruta es: \n ");
Y (! isEmptyStack_seq(st)) {
elemento = top _ seq(ST);
pop _ seq(ST ) ;
printf("\nEl nodo está: alineado \n ", elemento.x, elemento. y);/*Imprime cada punto en la ruta*/
} p>
}
/*Encuentra el camino desde el laberinto de entrada [x1][y1] hasta el laberinto de salida [x2][y2] en el laberinto*/
/*1 de ellos
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[x 1][y 1]= 2; /*Entra desde la entrada y marca*/
pushtostack(st, x1, y1, -1); la pila */
Y (!Isompty stack _ seq (ST)) {/*Cuando no funciona, retrocede paso a paso*/
elemento = top _ seq(ST);
pop _ seq(ST);
i = elemento.xj = elemento.y
for(k = elemento . d 1 ; k lt= 3; K ) {/*Pruebe cada dirección por turno*/
g = i dirección[k][0]; >
if(g = = x2 amp; amph = = y2 amp amp maze[g][h] == 0) {/*Ir al punto de salida*/
imprimir ruta (ST) ;/*Imprimir ruta*/
Regresar;
}
If (laberinto[g][h] == 0) {/*Ve a donde quieras no he sido*/ p>
Maze[g][h]= 2;/*mark*/
pushtostack(st,I,j,k);/*poner stack*/
I = g; j = h =-1; /*Convierte el siguiente punto al punto actual*/
}
}
}
printf("\nRuta no encontrada.
\ n ");/*Ruta no encontrada después de la reversión de la pila*/
}
int main(){
int dirección[][2 ]= {0, 1, 1, 0, 0, -1, -1, 0};
int laberinto[][11] = {
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
};
int x1, x2, y1, y2;
printf ("\n¿De dónde? (línea y arreglo)");
printf("\nIngrese línea y arreglo (línea gt1, arreglo gt1):");
scanf(" d d ", ampx1.
y 1);
printf("\n¿Dónde termina? (línea y disposición)");
printf("\nIngrese línea y disposición (línea lt=6, Organizar lt=9): ");
scanf("d d", ampx2, ampy2);
mazePath(laberinto, dirección, x1, y1, x2, y2); p>
Devuelve 0;
}
estructura typedef {
int x;*Subíndice de fila*/
int y;/*Subíndice de columna*/
int d;/*Dirección del movimiento*/
}Tipo de datos;
Struct SeqStack {/* Tipo de pila de secuencia definición */
int t; /*Indica la posición de la parte superior de la pila*/
Tipo de datos s[MAXNUM];
};
}; p>
typedef struct seq stack * PSeqStack;/*tipo de puntero de tipo de pila secuencial*/
PSeqStack pastack/* pastack es una variable de puntero que apunta al secuencial pila*/
PSeqStack createEmptyStack _ seq(void){
PSeqStack pastack
pastack =(PSeqStack)malloc(sizeof(struct seq stack));
if (pastack = = NULL)
printf("¡¡Espacio insuficiente!!\n ");
Otros
pastack- gt ; t =-1;
Devolver pastack
}
int isEmptyStack _ seq(PSeqStack pastack){
Devolver pastack- gt ; t = =-1;
}
/*Empujar un elemento x */
void push_seq( PSeqStack pastack, tipo de datos x) { p>
if(pastack- gt ;t gt= MAXNUM - 1)
printf("Overflow!\n ");
De lo contrario{
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 ");
Otros
pastack- gt;t-;
}
/*Cuando la pila apuntada por pastack no Cuando está vacío, busque el valor del elemento superior de la pila*/
Tipo de datos top_seq( PSeqStack pastack) {
return(pastack- gt; s[pastack- gt; t]);
}
void pushtostack(PSeqStack st, int x, int y, int d) {
Elemento de tipo de datos; p>
elemento .x = x
elemento.y = y
elemento.d = d
push_seq(st, elemento);
}
void printpath(PSeqStack st) {
Elemento de tipo de datos;
printf("\n\nLa ruta es:\n");
Y (!isEmptyStack_seq(st) ) {
elemento = top _ seq(ST);
pop _ seq(ST
printf("\nEl nodo está: arreglado con líneas\ n); ", elemento. Encuentra el camino desde el laberinto de entrada [x1][y1] hasta el laberinto de salida [x2][y2]*/
/*donde 1
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[x 1][y 1]= 2 ;/*Desde la entrada Entra y marca */
pushtostack(st, x1, y1, -1 /*Punto de entrada de la pila */
Y (! Isompty stack_seq); (st)) {/*Cuando no funciona, retrocede paso a paso*/
element = top _ seq(ST);
pop _ seq(ST)
i = element.xj = element.y
for(k = element . 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; amph = = y2 ampmaze [g][h] == 0 ) {/*Ir al punto de salida*/
imprimir ruta(ST /*Imprimir ruta*/
Regresar;
}
Si (laberinto[g][h] == 0) {/*Ve a donde no has estado*/
Laberinto[g][h ]= 2; /*Marcar*/
pushtostack(st, I, j, k); /*Poner en la pila*/
I = j = h; k =-1; /*Conversión del siguiente punto Para el punto actual*/
}
}
}
printf(" \nRuta no encontrada.
\ n ");/*Ruta no encontrada después de la reversión de la pila*/
}
int main(){
int dirección[][2 ]= {0, 1, 1, 0, 0, -1, -1, 0};
int laberinto[][11] = {
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
};
int x1, x2, y1, y2;
printf ("\n¿De dónde? (línea y arreglo)");
printf("\nIngrese línea y arreglo (línea gt1, arreglo gt1):");
scanf(" d d ", ampx1.y 1);
printf("\n¿Dónde termina? (línea y permutación)");
printf("\nIngrese línea y organice (línea lt=6, organizar lt=9): ");
scanf("d d ", ampx2, ampy2);
mazePath(laberinto, dirección, x1, y1, x2, y2);
Devuelve 0;
}