Os protótipo abaixo supõem que as listas (PILHA, FILA ou LIXO) são criadas dentro das funções resolve_fila e resolve_pilha.
/* A função resolve_fila resolve o labirinto usando uma FILA * Pré: recebe a matriz do labirinto e a posição (x,y) do rato * Pós: devolve NULL se não existir solução, caso contrário * devolve o endereço de uma célula em LIXO que contém a * posição do queijo. */ struct posicao *resolve_fila(char **lab, int x, int y); /* A função resolve_pilha resolve o labirinto usando uma PILHA * Pré: recebe a matriz do labirinto e a posição (x,y) do rato * Pós: devolve NULL se não existir solução, caso contrário * devolve o endereço de uma célula em LIXO que contém a * posição do queijo. */ struct posicao *resolve_pilha(char **lab, int x, int y); /* A função insere_fila insere uma celula posição, * atualizando o início da fila no caso de fila vazia * Pré: recebe uma posição (x,y), o endereço do fim e do início da fila * Pós: devolve o fim da fila após a inserção da célula contendo (x,y) e o pai * sendo o endereço do início da fila */ struct posicao *insere_fila(int x, int y, struct posicao **inicio, struct posicao *fim); /* A função insere_pilha insere uma celula posição, * no topo da pilha * Pré: recebe uma posição (x,y), o endereço da célula pai e do topo da pilha * Pós: devolve o topo da pilha após a inserção da célula contendo (x,y) */ struct posicao *insere_pilha(int x, int y, struct posicao *pai, struct posicao *topo); /* A função remove_fila remove um elemento do início da fila * e o insere no início da lista LIXO * Pré: recebe o endereço do inicio da fila e um ponteiro para o inicio do lixo * Pós: devolve o inicio da fila */ struct posicao *remove_fila(struct posicao *inicio_fila, struct posicao **inicio_lixo); /* A função remove_pilha remove um elemento do topo da pilha e o * insere no início da lista LIXO * Pré: recebe o endereço do topo da pilha e um ponteiro inicio_lixo * Pós: devolve o topo da pilha após a remoção de uma célula */ struct posicao *remove_pilha(struct posicao *topo, struct posicao **inicio_lixo); /* A função libera_lista serve para liberar a memória alocada para * uma lista encadeada que pode ser a PILHA, FILA ou o LIXO. * Pré: início da lista */ void libera_lista(struct posicao *ini);