Você está na página 1de 7

A aplicao do algoritmo de menor caminho na analise de um labirinto

1. Introduo

2. Desenvolvimento A origem da teoria dos grafos , em geral, associada ao problema das pontes de Knigsberg (cidade da Prssia que agora se designa por Kaliningrad). Parte desta cidade localizava-se em duas ilhas do rio Pregel as quais estavam ligadas s margens e uma outra atravs de 7 pontes, conforme a Figura 1 abaixo [1]:

Consta que os habitantes de Knigsberg gostavam de dar passeios de modo a atravessar todas as pontes e que alguns andavam particularmente aborrecidos pelo fato de no encontrarem um trajeto (com partida e chegada a um mesmo lugar) que lhes permitisse atravessar apenas uma vez cada uma das pontes. O matemtico suo Leonhard Euler (1707-1783) ao tomar conhecimento deste problema resolveu-o (indicando a impossibilidade da existncia de um tal percurso, numa memria que publicou em S. Petersburgo em 1736) modelando-o pelo multigrafo representado na Figura 2[1].

Segundo Rosen, 2009, grafos so estruturas que consistem em arestas e vrtices que sem ligam entre si. Alem disso temos que um grafo um conjunto (V,A) onde V um conjunto arbitrrio e A um subconjunto de V. Os elementos de V so chamados vrtices e os de A arestas. Quando um grafo no pode ter duas arestas paralelas e laos dizemos que ele simples[4]. Grafos so amplamente utilizados na computao para auxiliar na resoluo de diversos problemas com o auxilio de algoritmos modelados a partir desses. Podemos citar como exemplo os seguintes problemas: problema do caminho mnimo entre dois ns, problema do caixeiro viajante, problema da arvore espalhada mnima e a colorao dos mapas, onde verificou-se que quatro cores seriam o numero mnimo para pintar um mapa sem que pases vizinhos tivessem as mesmas cores. No entanto, para se chegar at a soluo necessrio realizar uma pesquisa

sistemtica das arestas de modo a lanar o vrtice e como descreveremos a seguir este pode ser feito atravs de duas tcnicas para percorrer o grafo. Porm precisamos primeiro conceituar o caminho no grafo. Para Carmo, Netto e Portugal, 2002, um caminho qualquer grafo ou subgrafo isomorfo a (V,E) dado por { {{ } } }

para algum k pertencente N. Em um caminho P dizemos que os vrtices de grau 1 so os extremos de P e os de grau 2 so os internos de P. J o numero de arestas representa o comprimento do caminho e a distancia entre dois vrtices quaisquer u, v e V definida como o menor caminho com extremos u, v. No entanto, para realizar a busca no menor caminho em um labirinto qualquer necessitamos de dois conceitos bsicos: busca em profundidade e largura.

2.1 Busca em profundidade Dado um grafo orientado G = (V; E). Onde V o conjunto de vrtices e E o conjunto de arestas ligando os vrtices. A estratgia utilizada no algoritmo de busca em profundidade consiste em percorrer o grafo, passando por todos os vrtices v que ainda tem arestas inexploradas. Quando todos os vrtices de um caminho so explorados a busca regressa para explorar outras arestas que deixam o vrtice a partir do qual v foi descoberto [3].

Como o prprio nome diz, ele se caracteriza por comear num n raiz (selecionando algum n como sendo a raiz, no caso de um grafo) e explora tanto quanto possvel cada um dos seus ramos, antes de retroceder.

2.2 Busca em Largura O algoritmo de busca em largura utilizado para percorrer grafos, explorando sistematicamente arestas vizinhas a partir de um no origem s, expandindo a fronteira de vrtices descobertos uniformemente e explorando a cada iterao os ns vizinhos no visitados. O algoritmo consegue explorar todo o grafo, descobrindo vrtices e as distncias para o vrtice origem quando o grafo esta representado em lista de adjacncias em O(|E| + |V|) [3]. Sendo assim podemos perceber que o algoritmo de busca em largura funciona da seguinte forma: comea pelo n raiz e explora todos os ns vizinhos. Ento, para cada um desses ns mais prximos, explora os seus ns vizinhos inexplorados e assim por diante, at que ele encontre o alvo da busca. O algoritmo utiliza, portanto, uma fila (FIFO - First In First Out). Em implementaes tpicas, ns que ainda no foram examinados por seus vizinhos so colocados na lista de adjacncia.

2.3 Materiais e Mtodos Para realizar a experincia de busca do menor caminho em um labirinto foram realizados os seguintes passos: desenhar um labirinto no software Gimp sendo que os caminhos possveis caracterizaram-se pela cor branca, o inicio pela cor azul, o fim pela cor vermelha e o restante da imagem pela cor preta. As cores utilizadas foram cores puras utilizando-se do valor da cor com base no principio R,G,B. Para continuar a experincia lanou-se mo da IDE Netbeans para realizar a programao, onde baseou-se no algoritmo de largura adaptado para alcanar o objetivo desse artigo.

2.4 Resultados O algoritmo de busca em largura uma parte essencial para chegar aos objetivos da experincia. O pseudocdigo abaixo demonstra seu funcionamento:
1 BFS (G, V, E, s) 2 para cada vrtice v em V 3 cor[v] branco 4 cor[s] cinza branco 5 inicializar fila q 6 adiciona_fila(q,s)

No entanto, para finalizar a experincia que seu resume a encontrar o menor caminho at a saida de um labirinto qualquer necessitou-se fazer alteraes no algoritmo de busca em largura onde adicionou-se as linhas 7 e 14:
1 BFS (G, V, E, s) 2 para cada vrtice v em V 3 cor[v] branco 4 cor[s] cinza 5 inicializar fila q 6 adiciona_fila(q,s) 7 anterior[s] NULO 8 enquanto fila_nao_vazia(q) 9 vert proximo_fila(q) 10 cor[v] preto 11 para cada vrtice viz em lista_vizinho(vert) 12 se cor[viz] = branco 13 cor[viz] cinza 14 anterior[viz] vert 15 adiciona_fila(q,viz)

Temos, ento,a seguinte imagem como entrada do algoritmo:

Para realizar a busca dos vrtices no arquivo bitmap e adicion-los em uma lista de adjacncia foi implementado o seguinte cdigo:
1 void busca_vertices_do_grafo() { 2 g.lista_vertices = criar_lista(); 3 for (int y = 0; y < altura; y++) { 4 for (int x = 0; x < largura; x++) { 5 if (is_blue(x, y) || is_red(x, y) || is_white(x, y)) {

11 12 13 14 15 16 17

p->y = y; v->pixel = p; inserir_final_lista(g.lista_vertices, v); if (is_blue(x, y)) { inicio = v;} if (is_red(x, y)) { fim = v;}

Esse trecho de cdigo percorre os pixels e cria uma lista para adicion-los conforme sua cor e sua vizinhana. Caso o pixel seja vermelho ele adicionado no fim da lista e caso seja azul adicionado ao inicio da lista, sendo assim verifica-se que ele atende a definio de busca em largura. Alm disso, para criar a lista de adjacncia e atender toda a definio criado a funo executar_funcao_lista que tem como parmetro uma lista que foi definida e preenchida na funo anterior quando o algoritmo percorre a imagem para perceber quais is pixels existentes e seus vizinhos.
1 nodo *iterador = l->inicio; 2 while (iterador != NULL3 Tendofunc(iterador->dado); executado esse processo podemos chegar ao algoritmo de busca em 3 iterador = iterador->prox; largura4 em si o qual ir encontrar o menor caminho a partir do grafo e da lista de

adjacncia, temos:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 void menor_caminho(grafo g, vrtice *inicio) { inicio->cor = CINZA; lista *fila = criar_lista(); inserir_final_lista(fila, inicio); while (!lista_vazia(fila)) { vrtice *v = (vrtice*) remover_inicio_lista(fila); v->cor = PRETO; pixel *p = v->pixel; lista *adjacentes = v->lista_adjacencia; nodo* iterador = adjacentes->inicio; while (iterador != NULL) { vrtice *viz = ((vrtice*) (iterador->dado)); if (viz->cor == BRANCO) { viz->cor = CINZA; viz->anterior=v; inserir_final_lista(fila,viz);} iterador = iterador->prox; }

Aps colorir de preto os vizinhos mais prximos do grafo ele ento executa a funo pinta_pixels que ir colorir de vermelho na imagem o menor caminho encontrado at a sada do labirinto:
1 vrtice* iterador = fim; 2 while(iterador != inicio){ 3 set_red(iterador->pixel->x,iterador->pixel->y); 4 iterador=iterador->anterior;} 5 save_as("saida.bmp");}

Sendo assim obtemos o seguinte resultado para a imagem inicial:

3. Concluso

4. Referencias 1. CARDOSO, D. M. Teoria dos Grafos e Aplicaes. Departamento de Matemtica da Universidade de Aveiro, 2004. Disponvel em <http://arquivoescolar.org/bitstream/arquivo-e/78/1/TGA2004.pdf> Acesso em 6 de abril de 2012

2. Carmo, M. R. R. do; Netto, P. O. B.; Portugal, L. da S. Uma heurstica interativa para gerao de caminhos em grafos com restrio de grau: aplicao ao projeto de sistemas metrovirios. Rio de Janeiro: Pesquisa Operacional, v. 22 n 1, 2002. Disponvel em: < http://www.scielo.br/pdf/pope/v22n1/a02v22n1.pdf> Acesso em 25/08/2013 3 . Cormen, T. H.; Leiserson C. E.; Rivest, R. L.; Stein, C. Introduction to Algorithms, The MIT Press e McGraw-Hill, 2009.Disponvel em:<
http://en.tjcities.com/wp-content/uploads/Books/Algorithms_3rd.pdf> Acesso em 25/08/2013

4. Feoloff, P.; Kohayakawa, Y.; Wakabayashi, Y. Teoria dos Grafos. So Paulo: Instituto de Matemtica e Estatstica, USP. 2011. Disponvel em: <http://www.ime.usp.br/~pf/teoriadosgrafos/texto/TeoriaDosGrafos.pdf> Acesso em 25/08/2013 5. ROSEN, K. H. Matemtica Discreta e suas Aplicaes. So Paulo: McGraw-Hill, 2009. Pg 589 675.

Você também pode gostar