Laberintos en los libros de texto de programación escolar
1. Este programa es dinámico y encontrará automáticamente la salida del laberinto después de ejecutarlo.
Este programa es de gran importancia para aquellos que acaban de aprender el lenguaje C.
3. Hay paredes alrededor, las coordenadas (1, 1) son la entrada y la esquina inferior derecha es la salida.
Descargo de responsabilidad: este programa no se puede depurar con VC y debe modificarse.
La herramienta de depuración de este programa es TC.
........................
#Contiene "graphics.h"
#Contiene "dos. h"
#Include " stdlib.h "
#Include "process.h"
#define MAX_COL 14/*Definir el tamaño del laberinto*/
#define MAX_ROW 14
estructura typedef
{ int vert
int horiz
} desplazamiento; p>
mapture(int i, int j, int k); /*laberinto, (I, j) k modo*/
init maze() /*inicializar la matriz del laberinto*/
findmaze(int i, int j); /*Busca (I, j) para ir, márcalo*/
mapa laberinto() /*Dibuja el laberinto original* /
int findpath(int row, int col);/*Función recursiva, encuentra el camino del laberinto*/
mapbar();/*Dibuja un cuadrado*/
init grap (); /*Inicializar VGA*/
print(); /*Una vez finalizado el laberinto, si la salida es exitosa*/
int startx =50, starty = 50/*del dibujo Coordenadas de pantalla */
int maze[MAX _ ROW][MAX _ COL]
Movimiento de compensación[8]={{ 0, 1}, {1, 1 },{-1,1},{1,0},{-1,0},{0,-1},{1,-1},{-1}, 1/*Mira en 8 direcciones* /
Initmaze()/*Inicializa la matriz del laberinto*/
{ int i, j
for(I; = 0; i ltMAX _ ROWI)/ *Laberinto de pared establecido en 1 */
{ maze[I][0]=
Laberinto[I][MAX _ COL -1]= 1;
p>}
for(I = 0; IltMAX_COLi)
{ laberinto[0][I]= 1;
Laberinto [MAX_ROW-1][I]= 1;
}
aleatorizar();
for(I = 1; IltMAX_ROW- 1; I )/* Generar gráficos de laberinto aleatoriamente 1 significa irrazonable y 0 significa factible*/
for(j = 1; j ltMAX _ COL-1; j )
{ p>
laberinto[I][j]= aleatorio(2);
}
}
Buscar laberinto(int i, int j)/ * Encuentra (i, j) para ir */
{
mapture(j, I, 2 /*Marcas en el gráfico*/
);sleep(1);
}
Returnmaze(int i, int j)/* Encuentra (i, j) para ir, pero marca */
{
mapture(j, I, 3); /*Marcas en el gráfico*/
Sueño(1);
} p>
Print(int i)/*Si la salida después del laberinto es exitosa*/
{ settextstyle(1, 0, 5);
if(i=); =1)
p>
outtextxy(340, 400, "¡Ruta real!");
else if(i==2)
outtextxy(340, 400, "¡Sin ruta! "); ");
}
Int findpath(int row, int col)/*Encuentra el laberinto mediante recursividad*/
{ int direct, next_row, next _ col
Directo = 0
Laberinto[1][1]= 2
mapa(1, 1, 2); /p>
Dormir(1);
mientras(direct lt8)/*Mirar en 8 direcciones*/
{ next_row=fila mover[directo]. Vertical; /*Establecer la siguiente coordenada*/
next_col=col move[direct]. horiz
If(laberinto[next _ fila][next _ col]= = 0)/*Si puedes ir, marca*/
{ laberinto[siguiente _ fila][ next_col]= 2;
findmaze(next_row, next_col);
if(next_ROW = =(MAX_ROW-2) amp; ampNext_col==(MAX_COL -2))/ *Encuentra la salida para salir del programa*/
{ print(1);
getch();
Salir(0);
}
Otros
findpath(next_row, next_col); /*No hay salida para continuar la recursividad*/
Laberinto [Siguiente fila][siguiente columna ] = 3;
returnmaze(next_row, next_col);
}
directo;
}
Return (línea);
}
La depuración de TC es buena