Diseño del curso de "Estructura de datos" - Solución de laberinto

Esto fue escrito por mí mismo el año pasado, y el lanzamiento ahora es solo para referencia

1 Objetivo del diseño
Problema del laberinto: escriba un programa para resolver el problema del laberinto. El laberinto está representado por una matriz cuadrada larga con m filas yn columnas, y 0 y 1 representan los caminos y obstáculos en el laberinto, respectivamente. Diseñe un programa para encontrar una ruta desde la entrada hasta la salida para un laberinto establecido arbitrariamente, o concluya que no hay una ruta. Los puntos principales del algoritmo: crear aleatoriamente un laberinto, observar el laberinto de diferente dificultad y dar una solución de ruta del laberinto al elegir la ayuda.
2 Análisis y diseño del
proyecto 2.1 Análisis de las necesidades del proyecto
1. Este programa realiza el proceso de exploración del laberinto. En la forma en que el usuario y la computadora hablan, es decir, después de que se muestra la "información rápida" en el terminal de la computadora, el usuario ingresa el programa de demostración en el teclado El comando de operación especificado, luego el programa explorará la ruta y generará la ruta.
2. En este programa de demostración, el formulario de entrada termina con "retorno de carro", y se permiten caracteres repetidos. 
3. La matriz bidimensional se usa para almacenar la posición del laberinto, y la pila se usa para almacenar la ruta de exploración. Cada nodo contiene tres variables enteras. El formulario de entrada termina con Enter.
4, en este procedimiento, el usuario puede entrar en el laberinto de tamaño arbitrario entre (3-100), y luego generar automáticamente laberinto al azar, ayuda en la elección del usuario, el sistema encuentra automáticamente la ruta y da salida a los laberinto
de almacenamiento de diseño 2.2
datos Estructura de almacenamiento: también conocida como la estructura física de los datos, es la realización de la estructura lógica de los datos en una computadora. Cabe señalar que la estructura lógica de los datos es analizar los datos a partir de la relación lógica entre los elementos de datos, no tiene nada que ver con el almacenamiento específico de los datos y es independiente de la computadora. La estructura de almacenamiento de datos depende de la computadora, incluida la representación de almacenamiento de valores de elementos de datos en la computadora y la representación de almacenamiento de relaciones lógicas en la computadora. La representación de almacenamiento de la relación lógica entre elementos de datos en la computadora se divide en los siguientes cuatro tipos:
método de almacenamiento secuencial: almacenamiento secuencial significa que todos los elementos de datos se colocan en un espacio de almacenamiento continuo y elementos de datos lógicamente adyacentes Las ubicaciones de almacenamiento físico correspondientes también son adyacentes (es decir, para garantizar que la relación de posición lógica sea coherente con la relación de posición física). Las estructuras de almacenamiento secuencial generalmente se implementan con la ayuda de matrices en lenguajes de programación.
Método de almacenamiento encadenado: el método de almacenamiento encadenado no requiere que elementos lógicamente adyacentes se almacenen en posiciones físicas adyacentes entre sí, es decir, el almacenamiento de elementos de datos es arbitrario. La representación de almacenamiento correspondiente a cada elemento de datos consta de dos partes, una parte almacena el valor del elemento en sí y la otra parte se utiliza para almacenar punteros que representan relaciones lógicas. Podemos pensar en el puntero como la dirección de almacenamiento del siguiente elemento de datos.
Modo de almacenamiento de índice: el modo de almacenamiento de índice agrega una tabla de índice mientras almacena elementos de datos. Cada elemento de la tabla de índice incluye una palabra clave y una dirección. La palabra clave es un elemento de datos que puede identificar de forma exclusiva un elemento de datos. La dirección indica la dirección de almacenamiento del elemento de datos o la primera dirección del área de almacenamiento.
Método de almacenamiento de hash: el almacenamiento de hash también se conoce como almacenamiento de hash. Este método de almacenamiento almacena elementos de datos en un área continua. La ubicación de almacenamiento específica de cada elemento de datos se basa en el valor clave de los datos. Hash) función calculada directamente.
Este experimento utiliza almacenamiento secuencial.
2.3 Diseño de algoritmo
1. Defina el tamaño del tipo de laberinto, puede personalizarlo para modificar #define SIZE 102 // El rango máximo del laberinto
2. Cree una estructura para almacenar la información de la matriz (la coordenada horizontal X de la matriz, la coordenada vertical Y de la matriz, Dirección dir)
typedef struct {int x; int y;} PosType; // Posición de coordenadas
typedef struct {PosType seat; // "Posición de coordenadas
" del bloque de canales en el laberinto int di; // Desde el bloque de canales anterior a este canal Bloquear "dirección"}
SElemType;
3. Crear aleatorio laberinto
vacío Aleatorio (int (* mg) [TAMAÑO],
tamaño int, PosType start,
PosType end); void PrintMaze (int (* mg)
[TAMAÑO], tamaño int); // Imprime la comprobación del estado del laberinto (char & choice);
// Confirma que la entrada es correcta int main () {
stack s;
int mg ​​[TAMAÑO] [TAMAÑO] = {1}, tamaño;
inicio PosType, end; elección de caracteres;
sistema ("mode con cols = 220 líneas = 220");
4. Establezca la ruta de impresión
Status MarkPath (PosType e, int ( mg) [SIZE],
int di); PosType FrontPos (PosType e,
int dir );
Status PathPrint (stack s, int ( mg) [SIZE]);
PosType NextPos (PosType e, int dir) {PosType E;
switch (dir) {case 1: Ex = e.x + 1; // right
Ey = ey;
break;
caso 2: Ex = ex; // hacia abajo
Ey = e.y + 1; break;
caso 3: Ex = ex-1; // hacia la izquierda Ey = ey; break;
caso 4: Ex = ex; // Up Ey = ey-1; break;
} return E;}
5 Resumen
5.1 Al obtener el diseño del curso durante este período, tengo una comprensión más profunda de la aplicación de las computadoras, el papel de las estructuras de datos y el uso del lenguaje C. Especialmente el progreso del lenguaje C me hace sentir profundamente que cualquier conocimiento que necesito necesita ser practicado. Sin práctica, realmente no puedo entender este conocimiento y dominarlo, haciéndolo mi propia riqueza. En todos los aspectos del aprendizaje teórico y la práctica, aprendí mucho a través del aprendizaje independiente y la consulta con el maestro. Por supuesto, también encontré muchos problemas, y es precisamente por el pensamiento causado por estos problemas que he ganado. Escriba el laberinto y créelo manualmente al principio, pero la
salida del laberinto de 50 50 100100 consume demasiado tiempo, por lo que se cambia para generar automáticamente el laberinto automáticamente
, nulo aleatorio (int (* mg)
[TAMAÑO], tamaño int, inicio PosType, final PosType);
Pero el problema está llegando, porque la aleatoriedad es demasiado grande, por lo que cada laberinto generado aleatoriamente es insoluble, es decir, hay demasiados obstáculos, lo que resulta en muchas veces que el punto de partida y el punto final son obstáculos sin carreteras, por lo que la proporción de carreteras a obstáculos debe ajustarse , Entonces hay
para (i = 1; i <size-1; i ++)
para (j = 1; j <size-1; j ++) {
k = rand ()% 4; // genera aleatoriamente 0, 1, 2, 4 Tres números
si (k) mg [i] [j] = 0;
más {
mg [i] [j] = 1;} // más
}
Cambie el obstáculo estableciendo el número de k = rand ()% 4; La relación con el camino es generalmente de 3 a 5. Si es mayor que cinco, la probabilidad de tener un camino es cercana al 100% y la probabilidad de que 3 tenga una solución es ligeramente menor, así que elija 4, la probabilidad de tener una solución y ninguna solución es igual. No uses el
código fuente, te da tantas ideas

23 artículos originales publicados · Me gusta 13 · Visitantes más de 10,000

Supongo que te gusta

Origin blog.csdn.net/huayula/article/details/93709561
Recomendado
Clasificación