DETERMINAÇÃO DO CAMINHO DE CUSTO ÓTIMO

Documentos relacionados
Estrutura de Dados e Algoritmos e Programação e Computadores II. Aula 10: Introdução aos Grafos

Definições Básicas para Grafos

Conceito Básicos da Teoria de Grafos

Conceitos Básicos da Teoria de Grafos

Teoria dos grafos. FATEC Carapicuíba Augusto de Toledo Cruz Junior

Cap. 2 Conceitos Básicos em Teoria dos Grafos

Estruturas de Dados Grafos

GRAFOS. Prof. André Backes. Como representar um conjunto de objetos e as suas relações?

ESTRUTURAS DE DADOS. prof. Alexandre César Muniz de Oliveira. 1. Introdução 2. Pilhas 3. Filas 4. Listas 5. Árvores 6. Ordenação 7. Busca 8.

UNIP - Ciência da Computação e Sistemas de Informação. Estrutura de Dados. AULA 8 Grafos. Estrutura de Dados 1

Aplicação do algoritmo de Dijkstra para o problema de roteamento da frota de táxis partindo de um ponto fixo

Percursos em um grafo

Pesquisa Operacional II. Professor João Soares de Mello

TGR BCC Representação Computacional de Grafos. Prof. Ricardo José Pfitscher

Problemas de Fluxo em Redes

Percursos em um grafo

Grafos - Motivação. Grafos - Motivação. Algoritmos e Estruturas de Dados II Introdução a Grafos

Prof. Marco Antonio M. Carvalho

MATEMÁTICA DISCRETA. Patrícia Ribeiro 2018/2019. Departamento de Matemática, ESTSetúbal 1 / 47

IFRN. Introdução à Teoria dos Grafos. Prof. Edmilson Campos

INF 1010 Estruturas de Dados Avançadas

Pesquisa Operacional

Teoria dos Grafos. Profa. Alessandra Martins Coelho

Introdução a Grafos Letícia Rodrigues Bueno

PCC173 - Otimização em Redes

Departamento de Engenharia de Produção UFPR 57

Alg l ori r t i m t os e E str t u r tu t ra r s d e D ados I I Intr t o r duçã ç o ã a a Gr G a r f a o f s P of o a. M. C r C ist s ina n a /

Algoritmos e Estruturas de Dados II Introdução a Grafos. Divisão do arquivo

SCC Modelagem Computacional em Grafos Introdução a Grafos

Pesquisa Operacional. Teoria dos Grafos

Volmir Eugênio Wilhelm Departamento de Engenharia de Produção UFPR 45

Otimização. Otimização em Redes. Paulo Henrique Ribeiro Gabriel Faculdade de Computação Universidade Federal de Uberlândia 2016/2

ESTRUTURAS DISCRETAS (INF 1631) GRAFOS. 1. O que é um grafo? Defina um grafo orientado. Defina um grafo não-orientado.

grafo nós vértices arcos arestas

CES-11. Algoritmos e Estruturas de Dados. Carlos Alberto Alonso Sanches

Grafos Orientados (digrafos)

Grafos Parte 1. Aleardo Manacero Jr.

Problema do Caminho Mínimo

Grafos COM11087-Tópicos Especiais em Programação II

PCC173 - Otimização em Redes

TEORIA DOS GRAFOS TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS MATEMÁTICA DISCRETA II PROFº MARCOS NASCIMENTO

Algoritmos e Estruturas de Dados II Grafos conceitos gerais. Thiago A. S. Pardo Profa. M. Cristina Material de aula da Profa. Josiane M.

PERCURSOS. André Falcão, Carlos Augusto, Rafael Broédel e Lucas Dipré

INF 1010 Estruturas de Dados Avançadas

x y Grafo Euleriano Figura 1

Teoria dos Grafos. Motivação

Disciplina: Matemática Discreta Agostinho Iaqchan Ryokiti Homa

Grafos representação e aplicações. Prof. Guilherme Tomaschewski Netto

Problema de Roteamento de Veículos (VRP)

Módulo 2 OTIMIZAÇÃO DE REDES

GRAFOS Aula 04 Caminhos, Conexidade e Distância Max Pereira

Teoria dos Grafos. Valeriano A. de Oliveira, Socorro Rangel, Silvio A. de Araujo. Departamento de Matemática Aplicada

Teoria dos Grafos Aula 2

Lista de Exercícios Programação Inteira. x 2 0 e inteiros.

Grafos IFRN. Robinson Alves

Algoritmos em Grafos

Instituto de Computação - Universidade Federal Fluminense Teoria dos Grafos - Lista de exercícios

GRAFOS Aula 03 Representações de Grafos Max Pereira

GRAFOS E DIGRAFOS. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos

Teoria dos Grafos. Valeriano A. de Oliveira Socorro Rangel Departamento de Matemática Aplicada.

Teoria dos Grafos. Edson Prestes

5COP096 TeoriadaComputação

Noções da Teoria dos Grafos

Teoria dos Grafos. Teoria dos Grafos. Profa. Sheila Morais de Almeida DAINF-UTFPR-PG. agosto

Noções da Teoria dos Grafos. André Arbex Hallack

Volmir Eugênio Wilhelm Departamento de Engenharia de Produção UFPR 21

Teoria dos Grafos Aula 1 - Introdução

Prova Didática Grafos: Árvores Geradoras e Caminhos Mínimos, Análise de Complexidade

Teoria dos Grafos. Valeriano A. de Oliveira, Socorro Rangel, Silvio A. de Araujo. Departamento de Matemática Aplicada

Teoria dos Grafos. Valeriano A. de Oliveira Socorro Rangel Departamento de Matemática Aplicada.

COMPARAÇÃO ENTRE FROTA HOMOGÊNEA E HETEROGÊNEA EM PROBLEMAS DE ROTEAMENTO DE VEÍCULOS CAPACITADOS

Instituto de Computação - Universidade Federal Fluminense Teoria dos Grafos - Lista de exercícios

GRAFOS E ALGORITMOS TEORIA DE GRAFOS

2. Desenhe o grafo orientado G = (X, Γ) para: 3. Em cada alínea dois grafos são iguais. Identifique-os. (a) (b) (c)

Parte B Teoria dos Grafos

CAP4. ELEMENTOS DA TEORIA DE GRAFOS. Grafo [graph]. Estrutura que consiste num par ordenado de conjuntos, G ( V, E) , sendo:

Circuitos Hamiltorianos

1 Introdução Motivação

MÓDULO 2 - OTIMIZAÇÃO DE REDES

Noções da Teoria dos Grafos. André Arbex Hallack

Classes, Herança e Interfaces

MODELAGEM MATEMÁTICA E A CONTEXTUALIZAÇÃO DO ESTUDO DE GRAFOS E MATRIZES NO ENSINO MÉDIO

Lista de Exercícios Programação Inteira. x 2 0 e inteiros.

Oalgoritmo de Dijkstra

01 Grafos: parte 1 SCC0503 Algoritmos e Estruturas de Dados II

GRAFOS Conceitos Básicos (Parte 1)

APLICAÇÕES DE BUSCA EM GRAFOS

Comunicação e redes. Aula 2: Teoria dos Grafos Conceitos básicos. Professor: Guilherme Oliveira Mota.

UNIVERSIDADE DE SÃO PAULO INSTITUTO DE CIÊNCIAS MATEMÁTICAS E DE COMPUTAÇÃO Departamento de Ciências de Computação

Matemática Discreta. Aula 06: Teoria dos Grafos. Tópico 01: Grafos e suas Representações. Observação

MÓDULO 3 - PROBLEMAS DE COBERTURAS DE ARCOS E NÓS

Algoritmos de Caminho Mínimo Parte 1

Teoria dos Grafos Aula 2

Grafos - Introdução. Pedro Ribeiro 2014/2015 DCC/FCUP. Pedro Ribeiro (DCC/FCUP) Grafos - Introdução 2014/ / 32

UNIVERSIDADE DE SÃO PAULO INSTITUTO DE CIÊNCIAS MATEMÁTICAS E DE COMPUTAÇÃO Departamento de Ciências de Computação

Projeto e Análise de Algoritmos. Introdução. Prof. Ademir Constantino Universidade Estadual de Maringá Departamento de Informática

Teoria dos Grafos. Aula 5 - Estruturas de Dados para Grafos. Profª. Alessandra Martins Coelho. março/2013

Projeto e Análise de Algoritmos NP Completude. Prof. Humberto Brandão

Planaridade UFES. Teoria dos Grafos (INF 5037)

Transcrição:

0 MICHEL HENRIQUE DE PAULA BUENO RA 0205042-8 sem. DETERMINAÇÃO DO CAMINHO DE CUSTO ÓTIMO Jaguariúna 2005

1 MICHEL HENRIQUE DE PAULA BUENO RA 0205042-8 sem. DETERMINAÇÃO DO CAMINHO DE CUSTO ÓTIMO Monografia apresentada à disciplina Trabalho de Graduação III, do curso de Ciência da Computação da Faculdade de Jaguariúna, sob orientação do Prof. Ms. Fábio Alexandre Gaion Casotti, como exigência parcial para conclusão do curso de graduação. Jaguariúna 2005

2 BUENO, Michel Henrique de Paula. Determinação do Caminho de Custo Ótimo. Monografia defendida e aprovada na FAJ em 15 de dezembro e 2005 pela banca examinadora constituída pelos professores: Prof. Ms. Fábio Alexandre Gaion Casotti FAJ Orientador Prof. Ms. Peter Jandl Jr. FAJ Coordenador do curso Prof. Ms. Sílvio Petroli Neto FAJ Professor convidado

Dedico este trabalho aos meus pais Adriano Henrique e Marisa Isabel, que me proporcionaram a oportunidade de hoje estar aqui finalizando este curso. 3

4 Agradecimentos Gostaria de agradecer a minha noiva Tatiane, pela paciência com a distância e pelo amor concedido - tenham certeza que o recíproco é verdadeiro. Agradeço ao professor, orientador e amigo Fábio Alexandre Gaion Casotti, pela atenção e confiança depositada; e também ao coordenador Peter Jandl Junior e professores do curso de Ciência da Computação da FAJ pelo curso proporcionado: serei eternamente grato pela oportunidade. Agradeço também meus amigos por todos os momentos inesquecíveis que vivemos ao longo destes 4 anos de caminhada. Sem vocês o curso não teria a menor graça! A Deus, pela plenitude da vida; pela maravilha do mundo.

"Ciência da computação está tão relacionada aos computadores quanto a Astronomia aos telescópios, Biologia aos microscópios, ou Química aos tubos de ensaio. A Ciência não estuda ferramentas. Ela estuda como nós as utilizamos, e o que descobrimos com elas. (Edsger Dijkstra) 5

6 BUENO, Michel Henrique de Paula. Determinação do Caminho de Custo Ótimo. 2005. Monografia (Bacharelado em Ciência da Computação) Curso de Ciência da Computação da Faculdade de Jaguariúna, Jaguariúna. RESUMO DETERMINAÇÃO DO CAMINHO DE CUSTO ÓTIMO As pessoas na sociedade atual necessitam cada vez mais de instrumentos que lhes permitam uma melhor localização e orientação geográfica. A dificuldade em definir rotas para uma frota de veículos para atender determinadas demandas dentro de um ambiente geograficamente reduzido tem incentivado um grande número de pesquisas a fim de otimizar estes tráfegos. Este trabalho tem por objetivo prover uma solução viável, de custo ótimo ou próximo a este, para o problema de determinação do caminho ótimo. Para tal, o modelo apresentado utiliza um algoritmo baseado no algoritmo de Dijkstra, um algoritmo que conduz a uma solução rápida. Palavras-chave: OTIMIZAÇÃO, GRAFO, ALGORITMO DIJKSTRA, CAMINHO DE CUSTO ÓTIMO. ABSTRACT DETERMINATION OF THE WAY OF EXCELLENT COST The people in the current society need each time more than instruments that allow to one better localization and geographic orientation them. The difficulty in defining routes for a fleet of vehicles to take care of definitive demands inside of an environment geographically reduced has stimulated a great number of research in order to optimize these traffics. This work has for objective to provide a viable solution, of excellent or next cost to this, for the problem of determination of the excellent way. For such, the presented model uses an algorithm based on the algorithm of Dijkstra, an algorithm that leads to a fast solution. Keywords: OPTIMIZATION, GRAPH, ALGORITHM DIJKSTRA, WAY OF EXCELLENT COST.

7 SUMÁRIO LISTA DE FIGURAS... 8 1. INTRODUÇÃO... 9 1.1. Introdução... 9 1.2. Objetivo... 9 1.3. Motivações... 9 1.4. Estrutura da Monografia... 9 2. GRAFO... 11 2.1. Conceitos Fundamentais em Teoria dos Grafos... 11 2.2. Histórico... 11 2.3. Definições e Notações Básicas... 12 3. REPRESENTAÇÃO DE UM GRAFO NO COMPUTADOR... 19 3.1. Matriz de Adjacências... 19 3.2. Listas de Adjacências... 19 3.3. Matriz de Incidência... 20 4. OTIMIZAÇÃO - AS ORIGENS DO PROBLEMA... 21 4.1. O Problema do Caminho Mais Curto (PCMC)... 21 4.1.1. Formulação... 22 4.2. Problemas Correlatos e Aplicações... 22 4.3. Algoritmos de Solução... 23 4.3.1. Algoritmo de Dijkstra... 23 4.3.2. Algoritmo de Ford-Moore-Bellman... 25 4.3.3. Estado da Arte... 26 5. O PROBLEMA DA ROTA MAIS BARATA SUJEITA A PEDÁGIO... 27 6. INTERFACE DO SISTEMA... 28 6.1. Página Inicial... 28 6.2. Página de Resultados... 28 7. CONCLUSÕES... 29 7.1. Conclusão... 29 7.2. Melhoramentos... 29 REFERÊNCIAS BIBLIOGRÁFICAS... 30 APÊNDICES... 31 Parâmetros do Problema... 31 Algoritmo... 33

8 LISTA DE FIGURAS Figura 2.1: Grafo...12 Figura 2.2: Grafo 1... 13 Figura 2.3: Grafo 2...13 Figura 2.4: Grafo 3...14 Figura 2.5: Grafo Completo.... 15 Figura 2.6: Grafo 4.......15 Figura 2.7: Grafo 5... 15 Figura 2.8: Grafo 6......16 Figura 2.9: Grafo 7... 16 Figura 2.10: Grafo 8..... 16 Figura 2.11: Grafo 9..... 16 Figura 3.1: Matriz de Adjacência... 19 Figura 3.2: Lista de Adjacência.....20 Figura 3.3: Matriz de Incidência grafo direcionado....20 Figura 4.1: Algoritmo de Dijkstra......24 Figura 4.2: Algoritmo de Ford-Moore-Bellman......25 Figura 5.1: Distâncias entre as Cidades......27 Figura 5.2: Tarifas de pedágio por trechos....27 Figura 6.1: Tela inicial...28 Figura 6.2: Tela de resultados...28

9 1. INTRODUÇÃO 1.1. Introdução Na presente monografia, consideramos a questão-problema de como definir a melhor rota rodoviária entre duas cidades, ou seja, determinação do caminho ótimo, uma subárea da área de Pesquisa Operacional (Otimização). A aplicação visa atender as necessidades dos usuários da malha viária da Renovias (Concessionária de rodovias), possui um componente importante no sentido de proporcionar uma ferramenta que possibilita a redução de custos dos clientes, bem como o atendimento de uma demanda dos mesmos. O Sistema Renovias é formado por cinco rodovias que ligam Campinas ao Circuito das Águas e Sul de Minas: SP-340 (Campinas / Mogi Mirim / Mococa), SP-344 (Aguaí / Vargem Grande do Sul), SP-342 (Mogi Guaçu / Espírito Santo do Pinhal / São João da Boa Vista / Águas da Prata), SP-350 (Casa Branca / São José do Rio Pardo) e SP-215 (Vargem Grande do Sul / Casa Branca), numa extensão de 345,6 km s. 1.2. Objetivo O objetivo do projeto foi desenvolver uma aplicação capaz de encontrar a melhor rota rodoviária entre dois pontos, apresentando informações como distância percorrida, tarifas de pedágio, combustível consumido, tempo de viagem, etc., a fim de oferecer aos usuários da malha viária da Renovias uma solução viável, de custo ótimo ou próximo a este, para um melhor planejamento de sua viagem. 1.3. Motivações Obviamente, o interesse deste projeto não é meramente acadêmico, pelo contrário, as suas potencialidades de mercado são consideráveis. Na sociedade atual as pessoas necessitam cada vez mais de instrumentos que lhes permitam uma melhor localização e orientação geográfica. O desenvolvimento de uma aplicação deste gênero permitirá a todos os usuários saber qual o caminho ótimo entre duas cidades, entre outras informações relevantes. 1.4. Estrutura da Monografia A Monografia está estruturada em oito Capítulos: 1º Capítulo Introdução É apresentado o objetivo, motivações e descreve as várias etapas da realização do projeto.

10 2º Capítulo Grafo Descreve onde surgem vários problemas de grafos, um histórico, definições e notações básicas sobre grafos. 3 Capítulo Representação de um Grafo no computador Define matriz de adjacências e lista de adjacências. 4 Capítulo Otimização Relata as origens do problema, a formulação do problema do caminho mais curto, problemas correlatos. Descreve os algoritmos de Dijkstra e Ford-Moore-Bellman como algoritmos de solução. 5 Capítulo O problema da rota mais barata sujeita a pedágio Estabelece os critérios e restrições para elaboração do algoritmo. 6 Capítulo Interface do Sistema Neste capítulo são apresentadas as telas do sistema. 7º Capítulo Conclusões Neste capítulo são feitas a considerações finais sobre o projeto e ainda referenciados possíveis melhoramentos a aplicação. Apêndices Apresenta os parâmetros do problema e o algoritmo.

11 2. GRAFO 2.1. Conceitos Fundamentais em Teoria dos Grafos Teoria dos grafos é uma ferramenta útil na modelagem e formulação de problemas, tornando-os mais claros e precisos. Algumas vezes, uma formulação simples e precisa de um problema nos ajuda a compreendê-lo melhor. O maior trunfo de uma ferramenta de formulação é a possibilidade de compreender o modelo matemático de modo simplificado. Deste modo, na Teoria dos Grafos, a maior unidade de aprendizado que se usa é a assistência a colocações e possíveis encaminhamentos futuros a um problema. Uma vez que um problema seja formulado em linguagem teórica de grafos, os conceitos de Teoria dos Grafos podem ser usados para definir o que é necessário para analisar o problema. No entanto, alguns problemas podem ser modelados somente em parte por grafos (como por exemplo, problemas relacionados a telecomunicações), nos levando a crer que a Teoria de Grafos é algo que complementa com elegância a análise de vários problemas de nosso dia a dia. Problemas de Grafos surgem geralmente em: Determinação de Caminhos; Redes de comunicação; Localização de facilidades (Depósitos, Hospitais, Escolas, etc.); Desenhos de circuitos impressos; Desenho e/ou layout de revistas, jornais, etc; Distribuição de produtos; Telecomunicações; Limpeza urbana; Controle de tráfego; Atribuição de rádio freqüência móvel, etc. A Teoria dos grafos é uma ferramenta poderosa utilizada para solucionar uma série de problemas e, algumas vezes, fornecer idéias sobre como resolvê-los. Em geral, a Teoria de Grafos deve ser utilizada em conjunto com outras ferramentas (por exemplo, matemáticas ou estatísticas) a fim de se resolver de forma satisfatório um dado problema. Felizmente, o uso da teoria dos grafos pode nos ajudar a compreender de maneira sucinta o significado de problemas ligados ao dia a dia e algumas de suas possíveis soluções. 2.2. Histórico [1736] - Problema das Pontes de Konisbergs (Euler)

12 Origem da teoria dos grafos. [1850] - Problema das Quatro Cores (De Morgan) Qual o número mínimo de cores para se colorir um mapa. [1859] - Problema do Ciclo Hamiltoniano (Hamilton) É possível realizar um caminho no grafo, de tal forma a percorrer todos os vértices uma única vez e voltar ao ponto de partida? [1940] - Utilização em Pesquisa Operacional Impulsionada pelas pesquisas militares. [1960] - Uso em Informática Informática proporciona avanço em Teoria dos grafos, através da resolução de problemas computacionalmente. 2.3. Definições e Notações Básicas O conceito de Grafo é extremamente simples e até mesmo intuitivo. Podemos considerar que um grafo nada mais é que uma representação gráfica de interdependência entre elementos que são representados por nós. Elementos que atendem à relação imaginada são simbolicamente unidos através de um traço denominado aresta. O modelo possui uma interpretação gráfica muito confortável; contudo, tal desenho não tem o poder, em várias situações reais, de formalizar completa e satisfatoriamente a estrutura imaginada. Devido a esse fato é necessário que um grafo seja também definido analiticamente. Segundo Barbosa (1974, 1975) e Furtado (1973), um grafo é uma estrutura de abstração que representa um conjunto de elementos denominados nós e suas relações de interdependência ou arestas. Sua representação matemática é denominando por V o conjunto de vértices da estrutura, e por E o conjunto das arestas ou ligações entre os vértices (ver figura 2.1), um grafo pode ser representado por: G = ( V, E) Vértice. C Aresta A B Figura 2.1: Grafo Os termos nós e vértices são empregados usualmente como sinônimos.

13 Grafo Um grafo G(V,E) é definido pelo par de conjuntos V e E, onde: V - conjunto não vazio: os vértices ou nodos do grafo; E - conjunto de pares ordenados e=(v,w), v e w Î V: as arestas do grafo. Seja, por exemplo, o grafo G(V,E) dado por: V = { p p é uma pessoa } E = { (v,w) < v é amigo de w > } Esta definição representa toda uma família de grafos. Um exemplo de elemento desta família (ver figura 2.2) é dado por: V = { Maria, Pedro, Joana, Luiz } Maria Pedro E = { (Maria, Pedro), (Joana, Maria), (Pedro, Luiz), (Joana, Pedro) } Joana Luiz Figura 2.2: Grafo 1 Neste exemplo estamos considerando que a relação <v é amigo de w> é uma relação simétrica, ou seja, se <v é amigo de w> então <w é amigo de v>. Como conseqüência, as arestas que ligam os vértices não possuem qualquer orientação. Dígrafo (Grafo Orientado) Considere, agora, o grafo definido por: V = { p p é uma pessoa da família Castro } E = { (v,w) < v é pai/mãe de w > } Um exemplo de deste grafo (ver figura 2.3) é: V = { Emerson, Isadora, Renata, Antonio, Rosane, Cecília, Alfredo } E = {(Isadora, Emerson), (Antonio, Renata), Emerson Renata Antonio (Alfredo, Emerson), (Cecília, Antonio), (Alfredo, Antonio)} Isadora Alfredo Cecília Figura 2.3: Grafo 2 A relação definida por E não é simétrica pois se <v é pai/mãe de w>, não é o caso de <w é pai/mãe de v>. O grafo acima é dito ser um grafo orientado (ou digrafo), sendo que as conexões entre os vértices são chamadas de arcos. Ordem A ordem de um grafo G é dada pela cardinalidade do conjunto de vértices, ou seja, pelo número de vértices de G. Nos exemplos acima: ordem(ver figura 2.2) = 4 ordem(ver figura 2.3) = 6

14 Adjacência Em um grafo simples (ver figura 2.2) dois vértices v e w são adjacentes (ou vizinhos) se há uma aresta e=(v,w) em G. Está aresta é dita ser incidente a ambos, v e w. É o caso dos vértices Maria e Pedro na figura 2.2. No caso do grafo ser dirigido (ver figura 2.3), a adjacência (vizinhança) é especializada em: Sucessor: um vértice w é sucessor de v se há um arco que parte de v e chega em w. Na figura 2.3, por exemplo, diz-se que Emerson e Antonio são sucessores de Alfredo. Antecessor: um vértice v é antecessor de w se há um arco que parte de v e chega em w. Na figura 2.3, por exemplo, diz-se que Alfredo e Cecília são antecessores de Antonio. Grau O grau de um vértice é dado pelo número de arestas que lhe são incidentes. Na figura 2.2, por exemplo: grau(pedro) = 3 grau(maria) = 2 No caso do grafo ser dirigido (ver figura 2.3), a noção de grau é especializada em: Grau de emissão: o grau de emissão de um vértice v corresponde ao número de arcos que partem de v. Na figura 2.3, por exemplo: graudeemissao(alfredo) = 2 Grau de recepção: o grau de recepção de um vértice v corresponde ao número de arcos que chegam a v. Na figura 2.3, por exemplo: grauderecepção(alfredo) = 0 Fonte Um vértice v é uma fonte se grauderecepção(v) = 0. É o caso dos vértices Isadora, Alfredo e Cecília na figura 2.3. Sumidouro Um vértice v é um sumidouro se graudeemissão(v) = 0. É o caso dos vértices Renata e Emerson na figura 2.3. Grafo Regular Um grafo é dito ser regular quando todos os seus vértices têm o mesmo grau. O grafo 3 (ver figura 2.4), por exemplo, é dito ser um grafo regular-3, pois todos os seus vértices tem grau 3. Figura 2.4: Grafo 3

15 Grafo Completo Um grafo é dito ser completo (ver figura 2.5) quando há uma aresta entre cada par de seus vértices. Estes grafos são designados por Kn, onde n é a ordem do grafo. K 1 K 2 K 3 K 4 K 5 Figura 2.5: Grafo Completo Um grafo Kn possui o número máximo possível de arestas para um dado número de nós n. Ele é, também regular-(n-1), pois todos os seus vértices tem grau n-1. Grafo Bipartido Um grafo é dito ser bipartido quando seu conjunto de vértices V puder ser particionado em dois subconjuntos V1 e V2, tais que toda aresta de G une um vértice de V1 a outro de V2. Para exemplificar, sejam os conjuntos H={h h é um homem} e M={m h é uma mulher} e o grafo G(V,E) (ver o exemplo G4) onde: V = H M E = {( v, w) ( v H e w M ) ou ( v M e w H ) e v foi namorado de w } Maria Joana Carla M Pedro Luiz H Figura 2.6: Grafo 4 O grafo 5 (ver figura 2.7) é uma K 3, 3, ou seja, um grafo bipartido completo que contém duas partições de 3 vértices cada. Ele é completo pois todos os vértices de uma partição estão ligados a todos os vértices da outra partição. K 3,3 Figura 2.7: Grafo 5 Grafo Valorado Um grafo G(V,E) é dito ser valorado quando existe uma ou mais funções relacionando V e/ou E com um conjunto de números. Para exemplificar (ver figura 2.8), seja G(V,E) onde:

16 V = {v v é uma cidade com aeroporto} E = {(v,w,t) <há linha aérea ligando v a w, sendo t o tempo esperado de vôo>} Multigrafo São Paulo 20 Curitiba 60 50 30 Porto Alegre 45 Florianópolis Figura 2.8: Grafo 6 Um grafo G(V,E) é dito ser um multigrafo quando existem múltiplas arestas entre pares de vértices de G. Na figura 2.9, o grafo 7, por exemplo, há duas arestas entre os vértices A e C e entre os vértices A e B, caracterizando-o como um multigrafo. A C B D Subgrafo Figura 2.9: Grafo 7 Um grafo Gs(Vs, Es) é dito ser subgrafo de um grafo G(V,E) quando Vs Ì V e Es Ì E. Na figura 2.10, o grafo 8, por exemplo, é subgrafo do grafo 7 na figura 2.9. C B D Cadeia Figura 2.10: Grafo 8 Uma cadeia é uma seqüência qualquer de arestas adjacentes que ligam dois vértices. O conceito de cadeia vale também para grafos orientados, bastando que se ignore o sentido da orientação dos arcos. A seqüência de vértices (x6, x5, x4, x1) é um exemplo de cadeia na figura 2.11. Uma cadeia é dita ser elementar se não passa duas vezes pelo mesmo vértice. x x 3 1 x É dita ser simples se não passa duas vezes 2 pela mesma aresta (arco). x 4 x O comprimento de uma cadeia é o número de 5 x 6 arestas (arcos) que a compõe. Figura 2.11: Grafo 9 Caminho Um caminho é uma cadeia na qual todos os arcos possuem a mesma orientação. Aplica-se, portanto, somente a grafos orientados. A seqüência de vértices (x1, x2, x5, x6, x3) é um exemplo de caminho na figura 2.11.

17 Ciclo Um ciclo é uma cadeia simples e fechada (o vértice inicial é o mesmo que o vértice final). A seqüência de vértices (x1, x2, x3, x6, x5, x4, x1) é um exemplo de ciclo elementar na figura 2.11. Circuito Um circuito é um caminho simples e fechado. A seqüência de vértices (x1, x2, x5, x4, x1) é um exemplo de circuito elementar na figura 2.11. Fecho Transitivo O fecho transitivo direto (ftd) de um vértice v é o conjunto de todos os vértices que podem ser atingidos por algum caminho iniciando em v. O próprio vértice faz parte do ftd já que ele é alcançável partindo-se dele mesmo. O fecho transitivo inverso (fti) de um vértice v é o conjunto de todos os vértices a partir dos quais se pode atingir v por algum caminho. O próprio vértice faz parte do fti já que dele se pode alcançar ele mesmo. Grafo Conexo Um grafo G(V,E) é dito ser conexo se há pelo menos uma cadeia ligando cada par de vértices deste grafo G. Grafo Desconexo Um grafo G(V,E) é dito ser desconexo se há pelo menos um par de vértices que não está ligado por nenhuma cadeia. Ponte Uma aresta é dita ser um a ponte se sua remoção provoca uma redução na conexidade do grafo. Árvore Uma árvore é um grafo conexo sem ciclos. Seja G(V,E) um grafo com ordem n > 2; as propriedades seguintes são equivalentes para caracterizar G como uma árvore: G é conexo e sem ciclos; G é sem ciclos e tem n-1 arestas; G é conexo e tem n-1 arestas; G é sem ciclos e por adição de uma aresta se cria um ciclo e somente um;

18 G é conexo, mas deixa de sê-lo se uma aresta é suprimida (todas as arestas são pontes); todo par de vértices de G é unido por uma e somente uma cadeia simples. Arborescência Uma arborescência é uma árvore que possui uma raiz. Aplica-se, portanto, somente a grafos orientados. Floresta Uma floresta é um grafo cujas componentes conexas são árvores.

19 3. REPRESENTAÇÃO DE UM GRAFO NO COMPUTADOR 3.1. Matriz de Adjacências Seja G = ( V, E) um grafo com n vértices. A matriz de adjacência (ver figura 3.1) para G é um array bidimensional n x n, que denotaremos por A, onde A( i, j) = 1 se a aresta ( V i, V j ) simétrica. está presente em G. A matriz de adjacência para grafos não dirigidos é sempre 3 5 0 1 1 1 0 0 1 0 0 1 1 1 4 6 1 0 0 1 1 0 1 1 1 0 1 0 1 2 Figura 3.1: Matriz de Adjacência 0 1 1 1 0 1 0 1 0 0 1 0 O grau de um vértice Vi em um grafo não dirigido, representado por matriz de adjacência, pode ser obtido pela soma de sua linha (ou coluna) correspondente. Para um dígrafo, a soma dos elementos na linha i V representa o grau de saída do vértice i enquanto a soma dos elementos na coluna j representam o grau de entrada de O problema com matriz de adjacência na representação de grafos é que questões como: 'quantas arestas existem no grafo? ', 'o grafo é conexo? ', serão respondidas em tempo 2 O( n ). Se o grafo possui poucas arestas, este tempo pode ser melhorado utilizando-se listas de adjacências, como veremos a seguir. 3.2. Listas de Adjacências Nesta representação, as n linhas da matriz de adjacência são representadas como n listas encadeadas. Existe uma lista para cada vértice em G (ver figura 3.2). Os nós na lista i representam os vértices que são adjacentes ao vértice i. Cada nó na lista possui pelo menos dois campos: VÉRTICE, que armazena o índice do vértice que é adjacente i e NEXT, que é um ponteiro para o próximo nó adjacente. As cabeças das listas podem ser armazenas em um array de ponteiros para facilitar o acesso aos vértices. É conveniente armazenarmos em cada entrada do array de cabeças de listas um campo FLAG que será utilizado posteriormente para indicar se um dado vértice possui V i.

20 alguma propriedade, por exemplo, em buscas, este FLAG pode indicar se um dado vértice já foi visitado ou não. v1 2 3 v2 v1 v3 v2 1 4 5 v3 1 6 7 v4 2 8 v5 v6 v5 2 8 v6 3 8 v4 v8 v7 v7 3 8 v8 4 5 6 7 Figura 3.2: Lista de Adjacência No caso de um grafo não dirigido com n vértices e e arestas, a representação acima requer um array de tamanho n para as cabeças e 2 e nós nas listas. O grau de qualquer vértice i em um grafo não dirigido pode ser determinado pelo número de nós na lista do vértice i. O número total de arestas no grafo pode ser determinado em tempo ( n e) O +. No caso de dígrafos, o número total de nós nas listas é e. O grau de saída de um nó i é o número de nós na lista do vértice i. O grau de entrada de um vértice i pode ser calculado em tempo O ( n + e) (como este cálculo pode ser feito?). Existem variações dessas representações para se mostrar as arestas que ligam determinados vértices. São chamada Matriz de Incidência e Lista de Arestas Incidentes. 3.3. Matriz de Incidência Nesse caso as colunas da matriz correspondem às arestas do grafo e as linhas aos nós (ver figura 3.3). Uma matriz x m A [ ] ( N M ) n = é denominada como de incidência do grafo G =, se, para todo arco j que liga o nó k ao nó l temos: a a a ij ij ij = + 1 i = k = 1 i = 1(para grafo direcionado, senão a = 0 nos outros casos u 1 u 2 u 3 u 4 a ij ij 1 ) 2 1 1 0 0 0 2 0 1 0 0 3-1 -1 1 1 4 0 0-1 0 5 0 0 0-1 u 1 u 2 u 3 u 4 3 4 Figura 3.3: Matriz de Incidência grafo direcionado

21 4. OTIMIZAÇÃO - AS ORIGENS DO PROBLEMA Em inúmeras situações, o problema de otimização estará associado às alternativas de conexão entre facilidades, ou entre os clientes e suas facilidades. Os problemas de localização caracterizam várias situações em que existe a necessidade de se examinar a distribuição do atendimento. Uma outra espécie de situação exige o estudo mais aproximado das ligações entre as demandas e seus pontos de atendimento. Nesse tipo de problemas em que a tomada de decisão é polarizada pela arquitetura de ligação, três estruturas de representação são extremamente importantes: Caminhos: quando o foco está em uma trajetória; Árvores: quando o foco está na continuidade da conexão e no estabelecimento de uma espinha dorsal sobre um conjunto de pontos demandantes, e Emparelhamento (matching): quando o problema da conexão envolve pequenos grupamentos. O critério mais comum para esses tipos de problemas é o de minimização da estrutura conectora ou do processo de ligação, daí a importância do caminho mais curto (a ligação mais barata entre dois pontos), das diversas árvores mínimas (a estrutura de conexão global mais barata) e do matching mínimo (emparelhamento de pontos dois a dois a custo mínimo). 4.1. O Problema do Caminho Mais Curto (PCMC) Sendo u e v dois vértices do grafo G = ( N, M ), o caminho mais curto entre u e v é uma seqüência de arestas que, passando por vértices distintos, liga u a v de forma a acumular o menor comprimento, ou distância. Para que possa haver um caminho mais curto entre os vértices u e v é indispensável que exista primeiramente uma conexão entre u e v, ou seja, se existe um caminho de u para v, significa que v é um sucessor de u em algum passeio legal sobre o conjunto N. O problema do caminho mais curto está contextualizado dentro do problema maior de percursos em grafos, que envolve: Caminhos mais curtos; Caminhos mais longos, e Percursos Hamiltonianos e Eulerianos. O problema de caminhos mais curtos está intimamente relacionado à solução de vários problemas combinatórios como os de roteamento, programação e seqüenciamento de tarefas etc. O problema de percursos ou de passeios, é um dos mais conhecidos e antigos na pesquisa operacional e sua solução foi sugerida até mesmo em lendas mitológicas da Grécia Antiga. O problema mais elementar na otimização de percursos é o chamado

22 problema do labirinto, em que o objetivo é apenas não repetir trajetos já realizados. Nessa linha de raciocínio, encontramos o chamado algoritmo de Trémaux (ver Boaventura [1996]). A característica desse algoritmo é que a estrutura do grafo (labirinto) não precisa ser conhecida e, na medida da própria leitura dos dados, o exame pode ser realizado. Algoritmos nessa linha de solução são hoje bastantes desejáveis, na medida em que a robótica exige cada vez melhores algoritmos para a navegação (Bar-Eli et al. [1994] e Papadrimitriou e Yannakakis [1989]) em contextos com vários elementos de incerteza. Como a solução encontrada por Teseu na lenda do Minotauro, o algoritmo de Trémaux marca cada aresta percorrida pela busca para evitar que o expedicionário se perca no trajeto. Os algoritmos de caminho mais curto, contudo, dispondo de todas as informações possíveis sobre o grafo, objetivam minimizar os esforços de busca. 4.1.1. Formulação Podemos formular o problema do caminho mais curto como um problema de programação matemática da seguinte forma: z = (CMC) Minimizar ( i, j ) sujeito a: xij x ( i, j ) A ( k, i) A x ij c ij A x 1 se i = o = se i o e i d ki 0 se i d + 1 = ( 0,1) ( i, j) A ij Onde os vértices o e d representam os vértices de início e término do caminho. 4.2. Problemas Correlatos e Aplicações O problema do caminho mais curto está associado a um enorme número de outros problemas na área de roteamento, manufatura, fluxo em redes etc. Destacaremos dois modelos mais recentes: Caminhos mais Curto com Janelas de Tempo (PCMC-JT): trata-se da versão do caminho mais curto restrita em um intervalo de chegada aos nós, semelhante aos problemas de roteamento com janela de tempo. Desrochers e Saumis [1988] estudam a adaptação dos algoritmos de rotulação para esse caso. Caminho mais Curto em Grafos Estocásticos (PCMC-GE): nesse caso existem algumas linhas de trabalho que incluem: Falha nos vértices (Jaillet [1992]). Custos estocásticos (Loui [1983]).

23 Ligações estocásticas (Psaraftis e Tsitsiklis [1993]). As estratégias de abordagens para a solução definem o caminho ótimo sob incerteza como: Aquele que não excede o comprimento do caminho em valores pré-fixados (Henig [1990]). Aquele que mais provavelmente vai se aproximar do caminho mais curto (Sigal et al. [1980]). Aquele que a priori minimiza a distância esperada (Jaillet [1992]). 4.3. Algoritmos de Solução Na área de programação matemática encontramos as possibilidades para a solução do PCMC: Algoritmos com especialização do simplex. Algoritmos de fluxo. Entretanto, os mais eficientes algoritmos hoje estão disponíveis através da abordagem em grafos. Nessa linha, dentre várias, duas grandes vertentes são dominantes: Algoritmos de ajustes sucessivos. Algoritmos por indução e ajuste. Em relação ao problema em si, três situações são distintas: O caminho mais curto entre um par de nós. O caminho mais curto entre todos os nós do grafo. O caminho mais curto entre um nó origem e vários nós destinos. 4.3.1. Algoritmo de Dijkstra Em 1959 Dijkstra sugeriu um algoritmo de rotulação para caminhos em grafos com arcos positivos, utilizando indução e ajuste, eficiente e de fácil implementação computacional. Chamando de: Lista F (lista de nós fechados) = o conjunto dos vértices para o qual já se conhece um caminho mínimo. Lista A (lista dos nós abertos) = o conjunto dos nós para o qual ainda não se conhece um caminho mínimo. t = contador de iterações. V = representando o conjunto dos nós rotulados e abertos em G. r = índice do vértice a ser fechado na iteração t.

24 C = ( ) cij diretamente. = matriz de custos representando as distâncias entre vértices ligados d ij = a distância entre os vértices xi e x j na iteração t. rot( i) = vetor que guarda o vértice que deu origem à distância calculada para o vértice de índice i. ( r) R + = conjunto de vizinhos do vértice de índice r. Podemos descrever o algoritmo como se resume abaixo: Algoritmo Dijkstra (Caminho mais Curto) INÍCIO Ler os dados de G ( N, A) =, onde d ij Inicializar variáveis 0 { rot( i) 0, i N} t a n fazer Para = 1 Início FIM Fim r x F F A A \ é a distância entre os nós vizinhos de G { }; V { x } 1 d ; { } 11 d i N \ 1 i x1 { r} ; { r} ; + R ( r) V A Para i V fazer min { d } i tal que d1i i1 xi A Início Fim t 1 { d ( d d )} p min + Se p 1 i, 1 < d t 1i Início Fim 1r, então ri d t 1 i p ; rot 1 ( ) r Figura 4.1: Algoritmo de Dijkstra ; { N} A ; F φ ; 2 A complexidade do algoritmo de Dijkstra é O( n ). Esse algoritmo não é capaz de encontrar caminhos mais curtos em presença de arcos negativos, uma vez que a cada iteração, o vértice examinado com menor distância acumulada é fechado. O Algoritmo calcula as menores distâncias de um vértice inicial a todos os outros.

25 4.3.2. Algoritmo de Ford-Moore-Bellman O algoritmo de Ford-Moore-Bellman, assim denominado em homenagem ao trabalho simultâneo desses pesquisadores (ver Bellman [1958]), mas publicado em épocas diferentes, abre mão do fechamento de um nó a cada iteração, e examina todos os nós até que não seja mais possível melhorias, podendo, com isso, aceitar arestas negativas. O critério de parada está associado a não modificação de todos os rótulos em uma iteração. A idéia básica da iteração é de que, se um caminho de um vértice s para um j contém k arestas, um caminho melhor de s para j conterá, no máximo, k + 1 arestas. Denominado de: l ( s, j) l s = comprimento de um caminho entre s e j. = comprimento do caminho associado ao nó s. k l j = comprimento do menor caminho P k sj A. O algoritmo pode ser assim descrito: Algoritmo Ford-Moore-Bellman INÍCIO k Psj usando no máximo k arcos, em que Ler os dados de G = ( N, A), onde l ( i, j) é o comprimento da aresta ( j) sejam i, j vizinhos em G e S o nó inicial da busca. Inicializar variáveis 1 { l( i j) se ( i, j) A}, ; Enquanto FIM l Início Fim k 1 j k l, j N j k + 1 l j minl k k + 1 0 k ; { l l 0}{ l 0, j = 1,..., n 1} fazer k j, 1 s s j ; l( s, j) min i k [ l + l( i, j) ] i i j, s; j = 1,..., n 1 Figura 4.2: Algoritmo de Ford-Moore-Bellman i para quaisquer que { j = 1,..., n 1} l s ;

26 4.3.3. Estado da Arte Abaixo, temos a relação dos vários algoritmos exatos que solucionam o problema de caminho mais curto: Autores Ano Descrição Complexidade Dijkstra 1959 Seleciona o nó de menor potencial O(n 2 ) Ford-Moore-Bellman 1956 Técnica de rotulação FIFO O(mn) Ford-Fulkerson 1962 Técnica de rotulação FIFO O(mn) Floyd-Warshall 1962 Técnica da operação tríplice O(n 3 ) Hu 1967 Algoritmo matricial O(mn) Dial 1969 Buckets e FIFO O(m+Cn) Pape 1974 Incremental sobre um conjunto de nós W restrito Θ(n2 n ) Pallottino 1984 Incremental sobre um conjunto de nós W restrito O(n2m) Glover & Glover-Klingman 1984 Combinação das abordagens Dijkstra e Ford-Moore-Bellman O(mn) Goldberg-Radzik 1993 Manipulação de conjuntos de rotulação

27 5. O PROBLEMA DA ROTA MAIS BARATA SUJEITA A PEDÁGIO Um carro pretende cruzar um trecho de estradas pedagiadas administrado pela RENOVIAS, trafegando da cidade X para a cidade Y. O custo da travessia é igual à soma do total da distância percorrida com o valor do pedágio.as regras de pedágio são simples: o carro paga a tarifa do pedágio correspondente ao trecho percorrido. A figura 5.1 apresenta as distâncias entre as cidades X e Y dentro das rotas possíveis, e a figura 5.2 as tarifas de pedágio de cada trecho passível de utilização. I 15 Q I p19 Q 34 10 P p8 p18 P H 37 G 22 4 19 O 41 23 15 K 10 L 22 M N H p7 G p6 p11 p17 p15 O p16 p13 K L M p12 p14 N F 26 F p10 8 E 28 J p5 E p9 J 10 p4 D 30 C D p3 C 18 A 18 B Figura 5.1: Distâncias entre as Cidades p2 p1 A B Figura 5.2: Tarifas de pedágio por trechos Existem diversas soluções, entre soluções algébricas e algoritmos, desenvolvidos para o cálculo do caminho de menor custo entre pontos. Para esse trabalho, algumas características específicas levaram a utilizar o algoritmo de Dijkstra para servir de base para o desenvolvimento do algoritmo desejado. O algoritmo de Dijkstra foi escolhido por ser um algoritmo que conduz a uma solução rápida e por trabalhar com arcos positivos, que é o caso acima.

28 6. INTERFACE DO SISTEMA 6.1. Página Inicial É a página de entrada da aplicação, onde apresenta uma tabela com cidades e distâncias fictícias. 6.2. Página de Resultados Figura 6.1: Tela inicial É a página da aplicação, que mostra o itinerário por onde se tem de passar para, pelo trajeto ótimo, chegar do local de Origem ao local de Destino. Figura 6.2: Tela de resultados

29 7. CONCLUSÕES 7.1. Conclusão Após o término deste grande desafio que delimita a conclusão da vida acadêmica, posso afirmar que me sinto bem mais preparado para os desafios do cotidiano. O desenvolvimento do projeto nos últimos meses foi sem dúvida um período de muita aprendizagem. Após a realização de um projeto como este, de viver todas as experiências que até à data eram desconhecidas, posso dizer que esta experiência foi muito marcante e enriquecedora. O fato de o projeto movimentar vários conceitos, tais como: programação, desenvolvimento de software, pesquisa operacional e estrutura de dados, entre outros, permitiu aplicar e relembrar conceitos apreendidos anteriormente em disciplinas deste curso. Com o passar do tempo o projeto foi ganhando forma, cada obstáculo ultrapassado permitiu observar um obstáculo ainda maior que o anterior. Foram meses de trabalho, onde a capacidade de organização, estruturação, análise e resolução de problemas foi grande. O nível de funcionalidade é satisfatório, preenchendo os requisitos que foram estabelecidos. 7.2. Melhoramentos O primeiro melhoramento que sugeria que se fizesse na aplicação, era implementar uma base de imagens do percurso a ser percorrido, isto é, marcar nas imagens as rodovias e os pedágios que pertencessem ao percurso. Outros melhoramentos poderão ser realizados o que tornaria a aplicação ainda mais interessante. Um deles é o zoom nas imagens, outro seria dar a possibilidade ao utilizador de escolher qual a função de custo para determinar o caminho ótimo (distância, tempo ou interesse turístico). Dotar a base de dados com mais informação tornaria a aplicação mais abrangente.

30 REFERÊNCIAS BIBLIOGRÁFICAS GOLDBARG, Marco César. Otimização Combinatória e Programação Linear. 2.Ed. Campus, 2005 CORMEN, T. H.; LEISERSON, C. E.; RIVEST, R. L; STEIN, C.Algoritmos : teoria e prática.. Rio de Janeiro: Campus, 2002 GERSTING, Judith L., IORIO, Valéria de Magalhães. Fundamentos matemáticos para a ciência da computação. 4.Ed. São Paulo: LTC, 2001 GOLDBARG, Marco Cesar; LUNA, Henrique Pacca L. Otimização Combinatória e Programação Linear. 1.Ed. Campus, 2000 SILVA, Elio Medeiros da; SILVA, Ermes Medeiros. Pesquisa operacional : programação linear, simulação. 3.Ed. Atlas, 1998 SZWARCFITER, Jayme Luiz. Grafos e algoritmos computacionais. 2.Ed. Rio de Janeiro: Campus, 1986 FURMANKIEWICZ, Edson, DEITEL, H. M., DEITEL, P. J.. Java. 3.Ed. Porto Alegre: Bookman, 2001 DEITEL, H. M., DEITEL, P. J.. Java: Como Programar. 4.Ed. Porto Alegre: Bookman, 2002 TRINDADE, Cristiano. Desenvolvendo Soluções com a Tecnologia Java. 1.Ed. Visual Books, 2003 Goodrich,Michael T; Tamassia, Roberto.Estrutura de Dados e Algoritmos em Java. 2.Ed. Porto Alegre: Bookman, 2002. HORSTMANN, Cay S., CORNELL, Gary. CoreJava 2: Vol. I Fundamentos. São Paulo: Makron Books, 2001 JANDL JUNIOR, Peter. Introdução ao Java.. São Paulo: Berkeley, 2002

31 APÊNDICES Parâmetros do Problema 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 Matriz - Caminhos 0 18 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 18 0 18 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 18 0 30 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 30 0 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 0 8 0 0 0 28 0 0 0 0 0 0 0 0 0 0 0 8 0 22 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 22 0 37 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 37 0 34 0 0 0 0 0 19 10 0 0 0 0 0 0 0 0 34 0 0 0 0 0 0 0 0 0 0 0 0 0 28 0 0 0 0 0 0 26 0 0 0 0 0 0 0 0 0 0 0 4 0 0 0 0 22 0 0 41 0 0 0 0 0 0 0 0 0 0 0 26 22 0 10 0 23 0 0 0 0 0 0 0 0 0 0 0 0 0 10 0 15 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15 0 0 0 0 0 0 0 0 0 0 0 19 0 0 41 23 0 0 0 0 0 0 0 0 0 0 0 0 10 0 0 0 0 0 0 0 0 15 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15 0 Matriz - Distâncias 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 14 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 4 0 0 0 0 0 8 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 0 0 56 0 0 0 0 0 0 0 0 0 0 0 0 5 0 0 0 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Matriz Pedágios 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 0 11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 11 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 0 5 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 5 0 6 0 0 0 0 0 5 5 0 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 0 0 0 0 3 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 3 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 0 0 3 3 0 0 0 0 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Matriz - Serviços i 0 i 1 i 2 i 3 i 4 i 5 i 6 i 7 i 8 i 9 i 10 i 11 i 12 i 13 i 14 i 15 Campinas Jaguariúna Holambra / Santo Antônio de Posse Mogi Mirim Mogi Guaçu Estiva Gerbi Trevo Elipse Casa Branca Mococa Espírito Santo do Pinhal Aguaí São João da Boa Vista Águas da Prata Poços de Caldas Vargem Grande do Sul Itobi i 16 São José do Rio Pardo Lista Cidades d 1 d 2 d 3 d 4 d 5 d 6 d 10 DELTA 1 - SP340 km 140+500 - Pista Norte DELTA 2 - SP340 km 178 - Pista Norte DELTA 3 - SP344 km 223+800 - Pista Leste DELTA 4 - SP340 km 200 - Pista Norte DELTA 5 - SP340 km 238 - Pista Norte DELTA 6 - SP340 km 254+700 - Pista Norte Área de Descanso - SP340 km 151 - Pista Sul d 11 CCP - SP340 km 161 - Pista Sul Lista - Serviços

32 g 1 GAMA 1 / Jaguariúna - SP340 km 121 g 2 GAMA 2 / Estiva Gerbi - SP340 km 193 g 3 GAMA 3 / Casa Branca - SP340 km 221 g 4 GAMA 4 / Mococa - SP340 km 254 g 5 GAMA 5 / Aguaí - SP344 km 219 g 6 GAMA 6 / São João da Boa Vista - SP344 km 230 g 7 GAMA 7 / Águas da Prata - SP342 km 240 g 8 GAMA 8 / Vargem Grande do Sul - SP215 km 41 g 9 GAMA 9 / Itobi - SP350 km 252 g 14 GAMA 14 / Pinhal - SP342 km 192 Lista Pedágios g 1 R$ 5,90 g 2 R$ 3,60 g 3 R$ 3,30 g 4 R$ 2,00 g 5 R$ 2,30 g 6 R$ 2,40 g 7 R$ 1,70 g 8 R$ - g 9 R$ 4,40 g 14 R$ 4,50 Lista - Tarifas

33 Algoritmo long int dijkstra(tinfo M[ ][MAXVERTICES], int ori, int dest, int precede[]) { int i, k; int distancia[maxvertices]; int menor_cam [MAXVERTICES]; int atual, dc, menordist, novadist; char parar = 'N'; for (i= 0; i < MAXVERTICES; i++) { distancia[i] = INFINITO; menor_cam [i] = NAO_MEMBRO; precede[i] = -1; } menor_cam [ori] = MEMBRO; distancia[ori] = 0; atual = ori; k = atual; while (atual!= dest && parar == 'N') { menordist = INFINITO; dc = distancia[atual]; for (i = 0; i < MAXVERTICES; i++) { if (menor_cam [i] == NAO_MEMBRO) { if (M[atual][i].adj =='S') novadist = dc + M[atual][i].valor; else novadist = M[atual][i].valor; if (novadist < distancia[i]) { distancia[i] = novadist; precede[i] = atual; } if (distancia[i] < menordist) { menordist = distancia[i]; k = i; } } } if (atual == k) { parar = 'S'; } else { atual = k; menor_cam [ atual] = MEMBRO; } } return (long) distancia[dest]; }