Projeto do Curso de "Estrutura de Dados" - Solução Labirinto

Isso foi escrito por mim no ano passado e o lançamento agora é apenas para referência

1 Objetivo do projeto
Problema do labirinto: escreva um programa para resolver o problema do labirinto. O labirinto é representado por uma matriz quadrada longa com m linhas e n colunas, e 0 e 1 representam os caminhos e obstáculos no labirinto, respectivamente. Crie um programa para encontrar um caminho da entrada até a saída para um labirinto definido arbitrariamente ou conclua que não há caminho. Os principais pontos do algoritmo: criar um labirinto aleatoriamente, observar o labirinto de diferentes dificuldades e fornecer uma solução de caminho do labirinto ao escolher ajuda.
2 Análise e design do projeto
2.1 Análise das necessidades do projeto
1. Este programa realiza o processo de exploração do labirinto.Como o usuário e o computador conversam, ou seja, depois que as "informações rápidas" são exibidas no terminal do computador, o usuário entra no programa de demonstração no teclado O comando de operação especificado, o programa explorará o caminho e o produzirá.
2. Neste programa de demonstração, o formulário de entrada termina com "retorno de carro" e caracteres repetidos são permitidos. 
3. A matriz bidimensional é usada para armazenar a posição do labirinto e a pilha é usada para armazenar o caminho de exploração.Cada nó contém três variáveis ​​inteiras. O formulário de entrada termina com Enter.
4, neste procedimento, o usuário pode entrar no labirinto de tamanho arbitrário entre (3-100) e, em seguida, gerar automaticamente labirinto aleatório, ajuda na escolha do usuário, o sistema automaticamente encontrar o caminho e emite os labirinto
2.2 projeto de armazenamento
de dados Estrutura de armazenamento: Também conhecida como estrutura física dos dados, é a realização da estrutura lógica dos dados em um computador. Deve-se salientar que a estrutura lógica dos dados é analisar os dados do relacionamento lógico entre os elementos de dados, não tem nada a ver com o armazenamento específico dos dados e é independente do computador. A estrutura de armazenamento de dados depende do computador, incluindo a representação de armazenamento dos valores dos elementos de dados no computador e a representação de armazenamento de relacionamentos lógicos no computador. A representação de armazenamento do relacionamento lógico entre elementos de dados no computador é dividida nos quatro tipos a seguir:
modo de armazenamento seqüencial: modo de armazenamento seqüencial refere-se a colocar todos os elementos de dados em um espaço de armazenamento contínuo e criar elementos de dados logicamente adjacentes Os locais de armazenamento físico correspondentes também são adjacentes (ou seja, para garantir que o relacionamento da posição lógica seja consistente com o relacionamento da posição física). As estruturas de armazenamento seqüencial geralmente são implementadas com o auxílio de matrizes em linguagens de programação.
Método de armazenamento encadeado: O método de armazenamento encadeado não exige que elementos logicamente adjacentes sejam armazenados em posições físicas adjacentes um ao outro, ou seja, o armazenamento de elementos de dados é arbitrário. A representação de armazenamento correspondente a cada elemento de dados consiste em duas partes, uma parte armazena o próprio valor do elemento e a outra parte é usada para armazenar ponteiros representando relacionamentos lógicos. Podemos pensar no ponteiro como o endereço de armazenamento do próximo elemento de dados.
Modo de armazenamento de índice: o modo de armazenamento de índice adiciona uma tabela de índice ao armazenar elementos de dados. Cada item da tabela de índices inclui uma palavra-chave e um endereço.A palavra-chave é um item de dados que pode identificar exclusivamente um elemento de dados.O endereço indica o endereço de armazenamento do elemento de dados ou o primeiro endereço da área de armazenamento.
Método de armazenamento hash: O armazenamento hash também é conhecido como armazenamento hash.Este método de armazenamento armazena elementos de dados em uma área contínua.O local de armazenamento específico de cada elemento é baseado no valor-chave dos dados. Hash) função calculada diretamente.
Este experimento usa armazenamento seqüencial.
2.3 Design do algoritmo
1. Defina o tamanho do tipo de labirinto, você pode personalizar para modificar #define SIZE 102 // O alcance máximo do labirinto
2. Crie uma estrutura para armazenar as informações da matriz (a coordenada horizontal X da matriz, a coordenada vertical Y da matriz, Direção dir)
typedef struct {int x; int y;} PosType; // Posição da coordenada
typedef struct {PosType seat; // "Posição da coordenada
" do bloco de canal no labirinto int di; // Do bloco de canal anterior para este canal Bloqueie "direction"}
SElemType;
3. Crie um labirinto aleatório
void Random (int (* mg) [TAMANHO],
tamanho int, PosType start,
PosType end); void PrintMaze (int (* mg)
[SIZE], tamanho int); // Imprime a verificação de status do labirinto (caractere e opção);
// Confirme se a entrada está correta int main () {
pilha s;
int mg ​​[TAMANHO] [TAMANHO] = {1}, tamanho;
início do PosType, fim; escolha de caractere;
sistema (“modo con = 220 linhas = 220”);
4. Defina o caminho de impressão
Status MarkPath (PosType e, int ( mg) [TAMANHO],
int di); PosType FrontPos (PosType e,
int dir );
Status PathPrint (pilha s, int ( mg) [SIZE]);
PosType NextPos (PosType e, int dir) {PosType E;
switch (dir) {caso 1: Ex = e.x + 1; // right
Ey = ey;
pausa;
caso 2: Ex = ex; // para baixo
Ey = e.y + 1; pausa;
caso 3: Ex = ex-1; // esquerda Ey = ey; pausa;
caso 4: Ex = ex; // Up Ey = ey-1; break;
} retorna E;}
5 Resumo
5.1 Obtendo o desenho do curso durante esse período, tenho um entendimento mais profundo da aplicação dos computadores, do papel das estruturas de dados e do uso da linguagem C. Especialmente o progresso da linguagem C. me faz sentir profundamente que qualquer conhecimento de que preciso precisa ser praticado.Na prática, não consigo entender verdadeiramente esse conhecimento e dominá-lo, tornando-o minha riqueza. Em todos os aspectos do aprendizado teórico e da prática, aprendi muito através do aprendizado independente e da consulta aos professores. É claro que também encontrei muitos problemas, e é exatamente por causa do pensamento causado por esses problemas que eu adquiri. Escreva o labirinto e crie-o manualmente no início, mas a
saída do labirinto de 50 50 100100 é muito demorada, por isso é alterada para gerar automaticamente o labirinto automaticamente
, anula Random (int (* mg)
[TAMANHO], tamanho int, tamanho inicial, início PosType, final PosType);
Mas o problema está chegando, porque a aleatoriedade é muito grande, de modo que cada labirinto gerado aleatoriamente é insolúvel, ou seja, existem muitos obstáculos, resultando em muitas vezes que o ponto de partida e o ponto final são obstáculos sem estradas, portanto a proporção de estradas para obstáculos deve ser ajustada Então, existe
para (i = 1; i <tamanho-1; i ++)
para (j = 1; j <tamanho-1; j ++) {
k = rand ()% 4; // gera aleatoriamente 0, 1, 2, 4 Três números
se (k) mg [i] [j] = 0;
else {
mg [i] [j] = 1;} // else
}
Altere o obstáculo definindo o número de k = rand ()% 4; A proporção com a estrada é geralmente de 3-5. Se for maior que cinco, a probabilidade de ter uma estrada é próxima de 100% e a probabilidade de 3 ter uma solução é um pouco menor; portanto, escolha 4, a probabilidade de ter uma solução e nenhuma solução é igual. Não use o
código-fonte, ele oferece muitas idéias

Publicado 23 artigos originais · Gosto 13 · Visitantes 10.000 ou mais

Acho que você gosta

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