a da Silva Junior
Caminho Euleriano
U NIVERSIDADE DO E STADO DE S ANTA C ATARINA C ENTRO DE C I E NCIAS T ECNOL OGICAS D EPARTAMENTO DE C I E NCIA DA C OMPUTAC AO NCIA DA C OMPUTAC AO , I NTEGRAL BACHARELANDO EM C I E
Sum rio a
Introducao 1 2 Mapa do Bairro Anita Garibaldi Modelagem 2.1 2.2 2.3 3 Grafo Real . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Grafo Otimizado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Matriz de Adjac ncias . . . . . . . . . . . . . . . . . . . . . . . . . . . . e
p. 3 p. 4 p. 5 p. 5 p. 6 p. 6 p. 7 p. 7 p. 7 p. 10 p. 11
Introducao
Esse trabalho tem por nalidade mostrar parte do conhecimento abstrado da disciplina de Teoria Geral dos Grafos.
Utiliazando-se desse artifcio, procurou-se analisar um sistema de ruas em busca de um possvel Caminho Euleriano. Para a tarefa em quest o foi implementado um algoritmo que a permite por meio do preenchimento de uma matriz Booleana, diagnosticar se h a possibilia dade de tal caminho existir e indicar qual seria a solucao mais vi vel atrav s de um grafo. a e
O grafo mostrar o novo caminho analizando os v rtices de cada grafo para que se modia e que o mapa real da maneira mais din mica possvel. a
Apresenta-se um representacao simplista do mapa de parte do Bairro Anita Garibaldi desta cidade de Joinville. A partir deste mapa, poder ser modelado um grafo valorado com a a dist ncia entre as ruas, e estas sendo suas arestas: a
Modelagem
2.1
Grafo Real
Na primeira fase da modelagem, obt m-se uma representacao real da situacao. Tal e representacao facilita a visualizacao do problema como um todo, sem a preocupacao de de talhes de otimizacao, faz-se apenas um esboco.
2.2
Grafo Otimizado
Pela execucao do programa no grafo real, obt m-se que o grafo n o apresenta Caminho Eu e a ` leriano. Ap s an lise e manipulacao, gera-se o seguinte grafo, agora sim propcio a Euleridade o a de Ciclos.
2.3
Com o grafo j modelado, passa-se para a construcao da matriz de adjac ncias, que ser a e a a representacao em ambiente computacional propriamente dita. E a partir desta matriz que o programa poder aplicar seus procedimentos. a
Para facilitar a visualizacao de tal matriz, sendo que esta apresenta-se em grande proporcao, a mesma est inclusa como ap ndice este trabalho. a e
Implementacao
Com a modelagem concluida, tanto de maneira formal (grafos) quanto pr tica (matriz de a adjac ncias), pode-se ent o discutir os procedimentos para resolver tal problema e partir para e a a implementacao da solucao.
3.1
Algortmo
O algortmo utilizado tem por objetivo identicar a exist ncia ou n o de um Caminho e a Euleriano no grafo dado. O processo (GERSTING, 1999) resume-se em, para cada coluna da matriz de adjac ncias, efetuar a soma de tais valores, admitindo-se ent o serem passveis de e a Caminho Euleriano, aquelas matrizes que tiverem o valor desta soma sendo par, ou tendo no m ximo duas somas com valores mpares. a
3.2
Programa
A partir do algortmo torna-se f cil a implementacao de um programa de computador para a sua execucao. Para tal, optou-se pelo uso da linguagem de programacao C, por sua not ria o manipulacao de matrizes de dados primitivos, neste caso, inteiros e de ponto utuante. Segue portanto o c digo comentado, para f cil compreens o: o a a /* Checagem de Existncia de Caminho Euleriano **********************/ e #include<stdio.h> #include<stdlib.h> int matriz(int vertices); int main(void){
3.2 Programa
int
vert;
printf("\n\nQuantos vertices:. "); scanf("%d", &vert); // Inicia a matriz de adjacencia matriz(vert); return 0; } int matriz(int vert){ int i, j, aux,aux2=0, aux3=0; int mat[vert][vert],soma[vert];
for(j=0; j<vert; j++){ for(i=0; i< vert; i++){ mat[i][j]=(int)calloc(((vert-1) * (vert-1)), sizeof(int)); soma[i] =(int)calloc(vert , sizeof(int)); } } for(j=0; j<vert; j++) { for(i=0; i< vert; i++){ printf("\nVertices [%d , %d] :", i+1, j+1); scanf("%d, %d", &mat[i][j]); aux2 = mat[i][j] + aux2; } // Vetor acumulativo para a soma das colunas soma[j]= aux2; aux2= 0; } // Mostra matriz de adjacncias e printf("\nMATRIZ DE ADJACENCIAS :: ."); printf("\n\n 1");
3.2 Programa
for(i = 1; i < vert-1; i++) printf(" _" ); for(i = 0; i < vert-1; i++) { printf("\n %d |", i+1); for(j = 0; j < vert-1; j++) printf(" %d", mat[i][j]); printf(" |"); } printf("\n"); // Mostra vetor com soma das colunas printf("\nSOMA DAS COLUNAS:."); for(j=0; j<vert; j++) printf("\nColuna %d = %d", j+1, soma[j]);
// Verifica se existe Caminho Euleriano for(j=0; j<vert; j++) { aux = soma[j]%2; if(aux != 0 ) aux3++; } if(aux3 > 2) printf("\nNo h possibilidade de Caminho Euleriano!"); a a else printf("\nH possobilidade de Caminho Euleriano!"); a return 0; }
10
Conclus o a
Com a realizacao desse trabalho, pode-se concluir que a utilizacao da teoria dos grafos n o a ca restrita somente ao ambiente acad mico. Ela pode ser facilmente aplicada aos problemas e do nosso cotidiano.
` Um simples caso como este, referindo-se apenas a uma pequena localidade, serve apenas para introduzir como se pode utilizar os mesmos m todos para resolver por exemplo, os problee mas de malha vi ria de uma grande cidade, assim como melhorar a distribuicao dos transportes a p blicos de massa e percurso em que se faz necess rio a passagem por v rias localidades. u a a
O exemplo aqui abordado, de ligacao entre ruas de um bairro, pode ser facilmente trans portado para percursos de localidades maiores. Dessa forma, um programa de computador que utilizasse um algoritmo de Caminho Euleriano seria de ampla utilizacao a qualquer empresa de transporte turstico ou de carga e com rcio, expandindo-se para as mais vastas aplicacoes. e
11
Refer ncias e
GERSTING, J. Fundamentos Matem ticos para Ci ncia da Computacao. S o Paulo: Makron a e a Books, 1999.