Red de conocimiento informático - Conocimiento informático - Laberintos en los libros de texto de programación escolar

Laberintos en los libros de texto de programación escolar

Algunas notas:

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;

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 )

{

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);

}

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