Felipe Affonso Feliphe Nogueira

Documentos relacionados
Algoritmo de Dijkstra

Grafos: Busca. Algoritmos e Estruturas de Dados 2. Graça Nunes

Oalgoritmo de Dijkstra

Em vários problemas, é preciso particionar os vértices de um grafo em conjunto de vértices independentes.

Grafos. Fabio Gagliardi Cozman. PMR2300 Escola Politécnica da Universidade de São Paulo

Teoria dos Grafos Aula 6

Grafos: Busca. SCE-183 Algoritmos e Estruturas de Dados 2. Thiago A. S. Pardo Maria Cristina

Teoria dos Grafos Aula 5

Aula 15 Variáveis Indexadas (vetores)

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

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

INF 1010 Estruturas de Dados Avançadas

Teoria dos Grafos Aula 3

PROGRAMAÇÃO INSTRUÇÕES DA LINGUAGEM C

Algoritmo Aproximado. Prof. Anderson Almeida Ferreira [DPV]9.2 [ZIV]9.2.2 e 9.2.3

GRAFOS Aula 08 Árvore Geradora Mínima: Algoritmos de Kruskal e Prim-Jarnik Max Pereira

GRAFOS Aula 03 Representações de Grafos Max Pereira

Projeto e Análise de Algoritmos

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

Problema do Caminho Mínimo

Teoria e Algoritmos em Grafos

Grafos: algoritmos de busca

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.

Programação: Vetores

Escola Básica e Secundária Mouzinho da Silveira. MACS 11.º Ano Problema do Caixeiro Viajante

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

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

Quantas variáveis para armazenar as notas e as médias são necessárias para resolver este problema?

Pesquisa em Grafos. Pedro Ribeiro 2014/2015 DCC/FCUP. Pedro Ribeiro (DCC/FCUP) Pesquisa em Grafos 2014/ / 33

= comprimento (distância, valor) da aresta orientada do vértice i ao vértice j,, e:

Algoritmo Aproximação. Prof. Anderson Almeida Ferreira [DPV]9.2 [ZIV]9.2.2 e 9.2.3

Estruturas de Dados Grafos

Algoritmos e Programação

Matemática Discreta - Exercícios de Grafos

x y Grafo Euleriano Figura 1

Introdução a Linguagem C (Parte I) UFPA Sistemas de Informação. Roberto Araujo 2013

CIC 111 Análise e Projeto de Algoritmos II

Teoria dos Grafos Aula 8

LÓGICA DE PROGRAMAÇÃO (C) VETORES E MATRIZES. Professor Carlos Muniz

Linguagem C estruturas de repetição

Teoria dos Grafos AULA

Teoria dos Grafos. Profa. Alessandra Martins Coelho

Teoria dos Grafos Aula 1 - Introdução

Melhor caminho entre duas estações de metro

GRAFOS BUSCAS E MENOR CAMINHO. Prof. André Backes

Teoria dos Grafos. Edson Prestes

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

Teoria dos Grafos Aula 8

Disciplina de Algoritmos e Programação. Vetor e Matriz

Teoria dos Grafos Aula 2

Busca em Profundidade e em Largura

Linguagem de Programação C

INF 1010 Estruturas de Dados Avançadas

Aula 25: Funções com Arrays

Computação 2. Aula 5. Profª. Fabiany defines vetor, strings e matriz por parâmetros de função

BCC204 - Teoria dos Grafos

Linguagem de Programação

Grafos - Representação

Redes de Computadores III / /

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

PCI- Matrizes. Profa. Mercedes Gonzales Márquez

GRAFOS Aula 05 Algoritmos de percurso: busca em largura e profundidade Max Pereira

Aula 18: Vetores Introdução a Programação Túlio Toffolo & Puca Huachi

Aula 09. Percurso em grafo

Matemática discreta e Lógica Matemática

Árvores. SCC-214 Projeto de Algoritmos. Thiago A. S. Pardo. Um nó após o outro, adjacentes Sem relações hierárquicas entre os nós, em geral

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

1 Trajeto Euleriano. > Trajeto Euleriano 0/20

Matrizes. Marina Andretta. 17 de abril de 2017 ICMC-USP. Marina Andretta (ICMC-USP) sme0230-ipc 17 de abril de / 30

Teoria dos Grafos Aula 22

grafo nós vértices arcos arestas

PCI- Operadores, Expressões e Funções. Profa. Mercedes Gonzales Márquez

Teoria dos Grafos. Edson Prestes

Capítulo 2- Modelos de grafos.

Universidade Federal de Uberlândia Faculdade de Computação. Linguagem C: estruturas de repetição While / Do While / For

Programação Estruturada

Capítulo 1. Aula Conectividade Caminhos

Programação de Computadores IV. Estruturas de repetição Slides cedidos por Bruno Augusto Dorta Marques

CCO 016 Fundamentos de Programação

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

Arranjos. David Déharbe

GRAFOS Aula 07 Algoritmos de Caminho Mínimo: Bellman-Ford / Floyd-Warshall Max Pereira

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

CI208 - Programação de Computadores. Aula 24: Arrays. Prof. MSc. Diego Roberto Antunes

Facebook. Um grafo é uma rede. Estrutura de dados fundamental em Informática, tal como listas e árvores.

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

Grafos Direcionados. > Grafos Direcionados Representações Computacionais 1/36

CICLOS DE REPETIÇÃO. Luís Charneca.

Gabriel Coutinho DCC035 - Pesquisa Operacional Lista 6

CIC 110 Análise e Projeto de Algoritmos I

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

MÓDULO 2 - OTIMIZAÇÃO DE REDES

Introdução à Programação C

Problemas de Fluxo em Redes

Cap. 2 Conceitos Básicos em Teoria dos Grafos

Transcrição:

Felipe Affonso Feliphe Nogueira

11 de maio 1930 / 2 de Agosto 2002

Cálculo de custo mínimo entre vértices de um grafo; Utilização de grafos orientados ou não; Aplicação em áreas de transportes e redes de computadores;

Um flag determinando se o caminho mais curto do vértice fonte até um vértice qualquer é conhecido; O comprimento do caminho mais curto do vértice fonte ao vértice destino. Ao ser iniciado o algoritmo, todos os comprimentos dos vértices do grafo possuem um valor desconhecido que é alterado durante a execução do algoritmo; O antecessor do vértice destino no caminho mais curto do vértice fonte a seu destino, sendo que ao início o antecessor de um vértice destino não é conhecido.

Definir o vértice principal (Origem): //Escolhemos o 1; 2 1 3 5 4

Atribuir a cada nó, um peso provisório. Igualamos a zero o nosso vértice inicial, e infinito para todos os outros vértices. 1 2 3 5 Custo 1 2 3 4 5 0 4

Definir o vértice final (Destino): //Escolhemos o 5; 2 1 3 5 4

Encontramos os vértices adjacentes à origem e adicionamos seu peso no vetor: Custo 2 1 2 3 4 5 0 30 40 10 1 3 20 5 Legenda Não visitado 20 Origem/Destino 4 Vert. Adjacentes Vert. Percorrido Fim do caminho

Visitamos o vértice com menor custo: 2 Custo 1 2 3 4 5 10 0 30 40 1 3 20 5 20 4

Verificamos se conseguimos chegar no destino e qual o custo total. 2 1 10 3 20 5 Custo 1-2-5 80 20 4

Verifica se existem vértices adjacentes não visitados: 2 Custo 1 2 3 4 5 10 0 30 40 1 3 20 5 20 4

Escolhemos o vértice não visitado. Adicionamos o seu custo 2 Custo 1 2 3 4 5 10 0 30 40 40 1 3 20 5 20 4

Encontramos o nosso destino. Calculamos o custo. Verificamos qual o melhor caminho. 2 Custo 1-2-5 80 1 10 3 20 5 Custo 1-2-3-5 60 20 4

Verificamos se ainda existem vértices adjacentes não visitados. 2 Custo 1 2 3 4 5 10 0 30 40 40 1 3 20 5 20 4

Escolhemos esse vértice que ainda não foi visitado. 2 Custo 1 2 3 4 5 10 0 30 40 40 1 3 20 5 20 4

Calculamos o custo total. 2 1 10 3 20 5 Custo 1-4-5 90 20 4

O melhor caminho foi escolhido: 1-2-3-5 2 Custo 1-2-5 80 1 10 3 20 5 Custo 1-2-3-5 60 20 Custo 1-4-5 90 4

O melhor caminho foi escolhido: 1-2-3-5 2 Custo 1-2-5 80 1 10 3 20 5 Custo 1-2-3-5 60 20 Custo 1-4-5 90 4

Utilizaremos a biblioteca stdio.h para as funções de scanf e printf

Delimitamos o nosso infinito como 999

Chamada da função dijskra. Passamos como parâmetro a quantidade de vertices, o nosso vertice origem, a matriz de custo e o vizinhos a esse vertice

Declaramos as variáveis utilizadas nessa função.

U: Gravar o indice de quando encontramos o menor caminho. É sempre reutilizada.

Count: para definir quando o termino da busca pelo menor caminho. Ela será utilizada no nosso While.

i: contador para o for.

Flag: vetor que indica se um determinado vétice ja foi percorrido ou não.

Min: uma distância inicial minima. Funciona como se fosse o nosso infinito. Todas as ditâncias deverão ser menores que essa varável.

J: Pode ser utlizada caso seja necessário imprimir a matriz de custo. Nessa apresentação essa variável não foi utilizada.

For que percorrer todos os vertices e os marca como não vizitados.

Preenche o vetor de vizinhos adjacentes adicionando o valor da matriz de custos na linha especificada como nosso vertice de origem.

Após essas rotinas, o nosso contador passa a valer dois.

While que irá percorrer todos os vértices buscando o menor caminho. Enquanto o contador for menor ou igual ao numero de vértices ele irá buscar o menor caminho.

No começo da nossa repetição nós colocamos a variável min como 99, para que todas as disntâncias verificas abaixo sejam menor que ela. Note que o nosso infinito valhe 999, e o min 99. 999 indica que os vértices não são adjacentes. Menores que 99 indica que existe uma disntância entre estes vértices.

Percorre todos os vertices.

Verifica se os vétices são adjacentes e se esse vértice ainda não foi visitado. Flag[i] -> verifica se é verdadeiro (1)!flag[i] -> verifica a negação da variável (0)

Se este vértice passar pelas condições acima, a distância minima será a ditância ate esse vértice.

A variável U receberá esse vértice.

O Vértice escolhido anteriormente como menor é marcado como visitado.

Aumentamos o valor do nosso contador.

Percorremos todos os vértices novamente

Verificamos se a distancia ate esse vértice com o menor caminho + o custo para chegar nesse vértice é menor do que a distância ate os vizinhos adjacentes e se ele não foi visitado. Note que essa verificação é feita com todos os vértices utilizando a variável U como referência.

Se o vértice i for aprovado nas condições acima, o nosso vetor de vizinhos irá receber a distância até o vertice U + custo ate o vértice U. Esse valor é incrementado até o final do for. Dessa forma conseguimos obter a menor distancia partindo de um ponto até todos os outros vértices.

Declaração das variáveis que usaremos no nosso código

Leitura da quantidade de vértices do nosso grafo.

For para ler o o peso das arestas.

Se for a diagonal principal não é necessário ler o peso da aresta.

Leitura das arestas.

Se o custo for zero, não existe ligação entre as arestas, dessa forma o custo adicionado será infinito (999)

Se for a matriz principal, o custo também será infinito.

Leitura do vértice de origem para calcularmos a distancia até os demais vértices.

Leitura do vértice de destino.

Chamamos a função passando q auntidade de vértices, nosso vértice de origem, nossa matriz de custos e a matriz de distancias.

Exibimos o vertice de origem, o vértice de destino e o vetor de distancias na posição do vertice de destino.

Não funciona para grafos com ciclos com pesos negativos; Complexidade Total: O((n+m)log n).

O algoritmo de Dijsktra busca o menor caminho partindo de um determinado vértice até os outros vértices do grafo.