Professional Documents
Culture Documents
O ALGORITMO
Para entender os passos do Algoritmo de Dijkstra se deve seguir minuciosamente o Fluxograma apresentado na Figura 3. Inicialmente os vrtices do grafo em estudo devem ser numerados, o que resulta em uma matriz de vnculos e pesos que pode ser usada como base para se desenvolver a lgica do programa. Na Figura 1 se apresenta um grafo ilustrativo para melhor compreenso do algoritmo e na Figura 2 sua respectiva matriz de vnculos e pesos [1][2].
Resumo Desde a dcada de 70, a programao vem se mostrando como uma ferramenta essencial e indispensvel para estudantes, engenheiros e pesquisadores. fato que as linguagens de programao evoluram de tal forma a permitir a concepo de classes de objetos e a modelagem dos problemas tcnico-cientficos de forma simples, clara e objetiva. Na Escola de Engenharia da Universidade Presbiteriana Mackenzie, em seus 110 anos de existncia, desenvolve-se diversos projetos multidisciplinares que utilizam a programao como ferramenta no s de busca da soluo, mas tambm no reso desta soluo em outros projetos. Este o caso de uso do Algoritmo de Dijkstra que, com sua simplicidade, revela seu apoio didtico e multidisciplinar na implementao de classes, simulao e reso nas mais diversas aplicaes de engenharia. Palavras chaves linguagens de programao, Dijkstra, programao com classes, simulao, reso.
FIGURA. 1
GRAFO ILUSTRATIVO COM 11 VRTICES.
INTRODUO
O Algoritmo de Dijkstra foi desenvolvido em 1959 por Edsger Wybe Dijkstra, de onde vem a origem do nome. Este algoritmo se aplica em grafos simples para determinar o
O passo seguinte definir respectivamente o vrtice origem (u0) e o vrtice destino (uf) na matriz de dados. Para a atual demonstrao, a origem o vrtice 4 (u0=4) e o destino o vrtice 8 (uf=8). Na seqncia criam-se dois conjuntos de vrtices, o M dos vrtices marcados, e o D dos vrtices desmarcados. A marcao pode ser feita por meio de um vetor com dados do tipo booleano (bool), verdadeiro (true) ou falso (false), dessa
1 Edson de Almeida Rego Barros, Escola de Engenharia, Universidade Presbiteriana Mackenzie, Rua da Consolao, 930, 01302-907, Consolao, So Paulo, SP, Brazil, prof_edson@mackenzie.com.br 2 Sergio Vicente Denser Pamboukian, Escola de Engenharia, Universidade Presbiteriana Mackenzie, Rua da Consolao, 930, 01302-907, Consolao, So Paulo, SP, Brazil, sergiop@mackenzie.com.br 3 Lincoln Csar Zamboni, Escola de Engenharia, Universidade Presbiteriana Mackenzie, Rua da Consolao, 930, 01302-907, Consolao, So Paulo, SP, Brazil, lincoln.zamboni @mackenzie.com.br
2007 ICECE
March 11 - 14, 2007, So Paulo, BRAZIL International Conference on Engineering and Computer Education 960
forma os marcados poderiam ter valor verdadeiro e os desmarcados o valor falso. A prxima providncia a criao de dois vetores para definir os comprimentos acumulados (L) e o vrtice anterior (A), ambos vetores guardam informaes relativas ao n em estudo. O vetor de comprimento (L) deve ter inicialmente o valor mximo (INFINITY em C++), enquanto o vetor vrtices anteriores (A) deve apontar inicialmente para nulo. 1 1 2 3 4 5 6 7 8 9 10 11 0 1 0 2 6 0 0 0 0 0 0 2 1 0 2 0 5 3 9 0 0 0 0 3 0 2 0 0 0 0 7 9 0 0 0 4 2 0 0 0 8 0 0 0 1 0 0 5 6 5 0 8 0 1 0 0 7 2 0 6 0 3 0 0 1 0 6 0 0 4 0 7 0 9 7 0 0 6 0 2 0 3 1 8 0 0 9 0 0 0 2 0 0 0 4 9 0 0 0 1 7 0 0 0 0 9 0 10 0 0 0 0 2 4 3 0 9 0 1 11 0 0 0 0 0 0 1 4 0 1 0
FIGURA. 2
MATRIZ DE VNCULOS E PESOS.
Uma vez preparadas as etapas anteriores, as estruturas de dados necessrias para o desenvolvimento do algoritmo esto prontas. Pode-se, ento, dar inicio a uma rotina de verificao, vrtice a vrtice. Partindo-se do vrtice inicial (u0) executa-se uma interao at atingir o vrtice de destino (uf). A rotina de interao consiste basicamente dos seguintes passos: a) verificar as conexes do vrtice da vez (ui) que no foram usadas (desmarcadas); b) calcular as distncias acumuladas das conexes disponveis; c) identificar entre as disponveis qual apresenta a menor distncia acumulada e marc-la; d) repetir a rotina at o vrtice da vez ser o vrtice de destino (ui = uf). Depois de definidas as distncias mnimas, ainda se faz necessria uma rotina para varrer os vrtices anteriores se partindo do vrtice destino (uf), a seqncia em ordem inversa dos caminhos mnimos. O algoritmo ainda contempla a verificao do caso de no existir a conexo entre os vrtices inicial (u0) e final (uf).
APLICAES DO ALGORITMO
O algoritmo de Dijkstra pode ser empregado em vrios contextos, desde o estudo de uma cadeia de produo at o clssico problema do carteiro que no pode passar duas vezes na mesma rua. FIGURA. 3
FLUXOGRAMA DO ALGORITMO DE DIJKSTRA.
2007 ICECE
March 11 - 14, 2007, So Paulo, BRAZIL International Conference on Engineering and Computer Education 961
A matriz de vnculos e pesos pode ser composta por informaes que representam distncia entre localidades, custos operacionais, quantidade de recursos, ou qualquer outro elemento passvel de ser ponderado entre os vrtices [2]. Por sua vez, os vrtices tambm podem assumir uma infinidade de possibilidades. Os vrtices podem representar cidades ou qualquer outra localidade, podem ser os estados em um sistema dinmico complexo, ou mesmo abstraes de momentos em um contexto. Qualquer situao que possa ser representada por um grafo simples, que possuas sua matriz de pesos definida passvel de ser submetido a proposta de Dijkstra.
Estruturada: onde se trata, em essncia, o conceito de funo e suas aplicaes; Orientada a Objetos: onde se trata, em essncia, o conceito de classe e suas aplicaes.
interessante que tanto o conceito de funo, como o de classe, so tratados de forma didtica em duas fases crescentes de dificuldade: a primeira reusando funes e classes presentes no ambiente integrado da linguagem e a segunda desenvolvendo funes e classes para reuso.
As matrizes precisam ter valores iniciais apropriados para a programao, conforme o segmento de cdigo exemplo abaixo:
//Valores iniciais para o algoritmo. for(int i = 0; i < n; i++){ // Preencha a matriz de marcao M. // M[i] = ... //Pode ser false ou true // Preencha as distncias acumuladas L. // L[i] = ... //Um nmero grande representa . }
2007 ICECE
March 11 - 14, 2007, So Paulo, BRAZIL International Conference on Engineering and Computer Education 962
M[Vert] = true; // Procura do prximo vrtice. Min = ...; // Nmero grande representa Vert = 0; for(int i = 0; i < n; i++) if(!M[i] && L[i] < Min){ Min = L[i]; Vert = i;} }
de classes e algoritmos para aplicaes numricas no s para a engenharia. [6] e [7] formam uma referncia mundial na programao numrica em C/C++.
REFERNCIAS
[1] [2] [3] ZAMBONI, L. C.; PAMBOUKIAN, S. V. D.; BARROS, E. A. R., C++ para Universitrios. So Paulo: Pginas & Letras, 2006. ZAMBONI, L. C.; MONEZZI JNIOR, O., Clculo Numrico para Universitrios. So Paulo: Pginas & Letras, 2002. ZAMBONI, L. C.; PAMBOUKIAN, S. V. D.; BARROS, E. A. R., Simulao Computacional como Apoio para Outras Disciplinas WCCSETE: World Congress on Computer Science, Engineering and Technology Education, 2006. PAMBOUKIAN, S. V. D.; ZAMBONI, L. C.; BARROS, E. A. R., C++ Builder para Universitrios - 2 Edio. So Paulo: Pginas & Letras, 2003. BARROS, E. A. R.; PAMBOUKIAN, S. V. D.; ZAMBONI, L. C., Ensinando Programao Atravs de Funes WCCSETE: World Congress on Computer Science, Engineering and Technology Education, 2006. PRESS, W. H.; TEUKOLSKY, S. A.; VETTERLING W. T.; FLANNERY, B. P., Numerical Recipes in C++: The Art of Scientific Computing. Cambridge University Press, 2002. PRESS, W. H.; TEUKOLSKY, S. A.; VETTERLING W. T.; FLANNERY, B. P., Numerical Recipes in C: The Art of Scientific Computing. Cambridge University Press, 1992.
O procedimento para quando o vrtice de destino encontrado. Na seqncia, a rotina apresenta o caminho mais curto:
// Caminho mais curto. if(Vert == Destino){ // Exiba o primeiro vrtice // ... while(Vert != Origem){ Vert = A[Vert]; // Exiba o valor de Vert novamente. // ... } } else{ // Exibe mensagem dizendo que no existe um // caminho do vrtice Origem ao Destino // ... }
[4]
[5]
[6]
[7]
RESULTADOS
No caso do grafo ilustrativo apresentado na figuras 1 e com a matriz de vnculos e pesos da figura 2 o resultado do processamento pode ser observado na figura 4.
FIGURA. 4
GRAFO ILUSTRATIVO COM CAMINHO MNIMO CALCULADO.
CONSIDERAES FINAIS
Neste trabalho vimos uma aplicao prtica de uma linguagem de programao como ferramenta auxiliar para a resoluo de problemas de engenharia. Em [1] o leitor encontrar outras boas aplicaes de classes na engenharia; em [4] um enfoque didtico com objetos de interface grfica em aplicaes de engenharia; em [3] e [5] os fundamentos da programao estruturada com exemplos ligados engenharia. Em [6] encontra-se excelentes implementaes
2007 ICECE
March 11 - 14, 2007, So Paulo, BRAZIL International Conference on Engineering and Computer Education 963