Buscar

Implementação_Fleury_Python

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 8 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 8 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

UNIVERSIDADE ESTADUAL DO MARANHÃO – UEMA 
CENTRO DE CIÊNCIAS TECNOLÓGICAS – CCT 
ENGENHARIA DA COMPUTAÇÃO 
 
 
 
 
 
 
JONAS CARVALHO DE SOUSA NETO 
GABRIEL CANCIO COSTA 
LUIS GUSTAVO DINIZ PEREIRA 
 
 
 
 
 
 
 
 
TEORIA DOS GRAFOS: ALGORITMO DE FLEURY 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
SÃO LUIS - MA 
2021 
 
 
 
 
 
 
 
JONAS CARVALHO DE SOUSA NETO 
GABRIEL CANCIO COSTA 
LUIS GUSTAVO DINIZ PEREIRA 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
TEORIA DOS GRAFOS: ALGORITMO DE FLEURY 
 
 
 
 
 
 
 
 
 
Trabalho apresentado a disciplina de 
Matemática Discreta Avançada, como 
requisito parcial para a obtenção de nota, 
referente ao segundo período, na 
Universidade Estadual do Maranhão. 
 
Orientador(a): Cicero Costa Quarto 
 
 
 
 
 
SÃO LUÍS – MA 
2021 
 
SUMÁRIO 
1. TEORIA DOS GRAFOS .................................................................................. 4 
2. ORIGEM E IMPORTÂNCIA .......................................................................... 4 
2.1 ETAPAS DO ALGORITMO .......................................................................... 4 
2.2 IMPLEMENTAÇÃO DO ALGORITMO ....................................................... 5 
● PASSOS DO ALGORITMO (EXECUÇÃO) ..................................................... 5 
●TESTE E EXECUÇÃO: CAMINHO EULERIANO E CICLO EULERIANO .... 6 
3 CONCLUSÃO .................................................................................................. 7 
REFERÊNCIAS .................................................................................................. 8 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1. TEORIA DOS GRAFOS 
A Matemática Discreta é uma área da matemática geral que corresponde a 
resolução de problemas do cotidiano através de estruturas discretas, ou seja, 
diferentemente do usual as funções algébricas possuem valores distintos, a caracterização 
dos problemas em símbolos ou conjuntos numéricos naturais é uma das principais 
características desta área. A procura por soluções cada vez mais simples (diferentes) e 
racionais chegou com intensidade em meados do século XX com o término da Segunda 
Guerra Mundial e o advento da Era dos Computadores, neste período, crescia a procura 
por profissionais (matemáticos, cientistas, físicos, engenheiros e etc.) que interpretassem 
sinais lógicos com maestria para comunicar-se com as máquinas afim de auxiliar na 
realização de cálculos extensos e complexos. Logo após, o principal destaque foi para 
outra área especializada na resolução de problemas discretos, A Teoria dos Grafos. 
 Os Grafos são estruturas discretas que permitem através de gráficos formados por 
vértices e arestas ilustrar diversas resoluções de problemas com símbolos matemáticos. 
Na definição propriamente dita, um modelo de grafo é um conjunto não vazio de 
vértices/nós(V) e arestas (E) que são direcionados ou não, podendo ser classificados de 
vários tipos e, considerados infinitos ou finitos dependendo do domínio do grafo. Por 
exemplo, o mapeamento das ruas de uma cidade para a análise de qual o caminho mais 
curto de um lugar A até um lugar B pode ser feito através da construção de um grafo ‘G’ 
e arbitrariamente exige a associação de pontos e linha, então, o domínio é uma situação 
real e é finita. 
 
2. ORIGEM E IMPORTÂNCIA 
 O algoritmo de Fleury é utilizado para a construção ou identificação de um ciclo 
euleriano em um grafo euleriano. Um caminho ou um circuito é dito euleriano se ele 
possui todas as arestas de um grafo. Um grafo que possui um circuito euleriano é um 
grafo euleriano. Um grafo que possui um caminho, mas não um circuito euleriano, é 
chamado de grafo semi-euleriano. 
 Tal algoritmo é muito importante para identificar se um grafo possui circuito e 
caminho de Euler, através dele, por exemplo, é possível provar o caso impossível das 
pontes de Konigsberg, em que não pode existir um circuito, mas sim, um caminho 
euleriano. 
 Além disso, vale destacar que o algoritmo contribuiu muito para o 
desenvolvimento do estudo dos grafos, conhecimentos como relação entre os graus, por 
exemplo, existe um teorema em que quando todos os graus são pares significa que existe 
um circuito euleriano, ademais, outro teorema que afirma que quando dois dos vértices 
possuem grau ímpar, então existe um caminho euleriano. 
 
2.1 ETAPAS DO ALGORITMO 
 Iniciando um trajeto por determinado grafo, cabe ao pesquisador aplicar as 
seguintes regras: 
 1. Escolher um vértice para iniciar o caminho 
 2. Escolher sempre um vértice não ponte como próximo. 
 - Fazer a pergunta: “É aresta ponte?” 
 - Caso não possua, percorrer uma aresta ponte. 
 3. Não percorrer a mesma aresta, pois conforme elas são apagadas, não 
podem mais ser percorridas. 
 - Se isso não for possível, o grafo tem apenas caminho e não um circuito. 
 
2.2 IMPLEMENTAÇÃO DO ALGORITMO 
 A implementação do algoritmo foi realizada na linguagem de programação Python 
por ser uma ferramenta de alto nível, possuir diversas funções especiais e possibilitar a 
recursividade no código. 
 
● PASSOS DO ALGORITMO (EXECUÇÃO) 
 Inicialmente, se insere os valores e as possíveis ligações de um grafo “G” no final 
do algoritmo, após isso chama-se a função “print_fleury”, nessa função temos o 
caminho(‘trail’) recebendo a função “fleury(G)”, passando então, aquele grafo ao 
algoritmo que vai definir se ele é um grafo euleriano, ou então caminho ou ciclo euleriano. 
 Dentro da função “fleury”, temos uma variável chamada “odn”, esta variável, 
acaba por receber uma função a qual foi passada como argumento o grafo G, a 
“odd_degree_nodes(G)”, que tem como objetivo descobrir quantos vértices de grau ímpar 
existem nesse grafo G. Caso a contagem de graus ímpares seja igual a 1 ou maior que 
dois, então este grafo não será euleriano. Senão o grafo terá seus valores passados para a 
variável “g”, e o caminhos (trail) serão definidos para receber novos valores. Caso todos 
vértices tiverem grau dois, então uma variável “u”, receberá o primeiro valor do grafo. 
Senão, “u” receberá o primeiro elemento do grafo copiado. 
 Enquanto, as ligações do grafo copiado forem maiores que 0, então o vértice atual 
(current_vertex) recebe o valor de “u”. Para o vértice “u” no grafo copiado com índice 
[current_vertex], haverá a remoção de “u” deste grafo e a remoção do vértice atual do 
grafo “g”. Se houver ponte, “u” será adicionado ao grafo com índice vértice atual e “u” 
irá adicionar o vértice atual. Senão houver ponte, finalizar o for. 
 Se houver ponte novamente, remover “u” do vértice atual, remover u do grafo 
com índice u, adicionar o vértice atual, e adicionar o caminho do vértice atual e u. Esse 
processo se repetirá até todos os caminhos serem preenchidos, por fim retorna o caminho. 
 Com o caminho retornado, basta fazer a análise, se o caminho retornado 
inicialmente voltou com ‘Não é um grafo Euleriano’, então, sairá isso no output. Caso o 
caminho retornado tenha o elemento final igual ao inicial, saíra Ciclo Euleriano, e o 
caminho que o programa escolheu para percorrer. Por fim, caso o vértice final seja 
diferente do inicial, imprimirá o “Caminho Euleriano” e o percurso feito no grafo. 
 
 
Clique na imagem ou aqui 
para fazer o download do algoritmo. 
 
 
 
 
 
 
https://drive.google.com/file/d/117LmzGPubRgPCbLvdad3C1p9iJNDrRKa/view?usp=sharing
https://drive.google.com/file/d/117LmzGPubRgPCbLvdad3C1p9iJNDrRKa/view?usp=sharing
 
●TESTE E EXECUÇÃO: CAMINHO EULERIANO E CICLO EULERIANO 
 
Grafo 1 - Aplicado no fim do algoritmo 
 
 
 
Existe um teorema que afirma que quando o grafo possui apenas 2 vértices de grau 
ímpar, ele será um caminho euleriano. Com isso, fizemos a aplicação de modo que 
houvesse uma função chamada “odd_degree_nodes” que faz essa verificação da 
quantidade de vértices de grauímpar que o grafo possui. 
 Caso houvesse menos que dois vértices ou mais que dois vértices de grau ímpar, 
então aquele grafo não poderia ser nem Ciclo e nem Caminho Euleriano. Logo ele não 
seria impresso. 
 
Grafo 2 - Aplicado no fim do algoritmo 
 
Usando o mesmo princípio do primeiro exemplo, chama-se a função 
“odd_degree_nodes” na função principal (“fleury”) para obter a quantidade de vértices 
com grau ímpar que integram o grafo. e determinar se o grafo é euleriano ou não. 
Após este procedimento, caso o grafo seja euleriano, é feita a lógica para 
determinação de pontes e em seguida a iteração sobre as arestas determinado o caminho 
adequado. 
O último passo é feito na função “print_fleury”, que recebe ao receber a instância 
da função “fleury”, recebe o caminho e faz a validação para determinar se é um ciclo ou 
circuito euleriano, imprimindo os resultados. 
 Além desses dois grafos citados acima, fizemos a implementação de um não 
euleriano, por isso que na saída ele mostra por último que aquele grafo não é euleriano. 
 
 
3 CONCLUSÃO 
Logo, foi concluído com exatidão a aplicação do algoritmo de Fleury para a 
descoberta de caminho ou ciclo eulerianos. Para isso, a pesquisa pelo uso de grafos na 
linguagem escolhida foi imprescindível, pois os pesquisadores não tinham conhecimento 
adequado para a elaboração de grafos nessa linguagem. 
Uma das limitações são a escolha do primeiro vértice do grafo, o qual deve ser 
dito pelo usuário do algoritmo, além disso, devem ser inseridos todos os vértices os quais 
determinado ponto faz conexão, com isso, o algoritmo vai escolher o melhor caminho a 
ser percorrido. 
Além disso, poderia ser adicionado um framework para a criação de grafos, isso 
possibilitaria uma visão melhor do caminho de cada grafo inserido, bem como ajudaria o 
usuário a entender cada passo que se daria para a execução do algoritmo. 
Com isso, o trabalho foi bem proveitoso no sentido de entendimento do algoritmo 
em si, possibilitando aos pesquisadores a compreensão de cada passo do algoritmo, bem 
como os teoremas e definições que cercam um caminho ou ciclo em um grafo euleriano. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
REFERÊNCIAS 
Algoritmos em Python. Representação de Grafos. 
Disponível em: https://algoritmosempython.com.br/cursos/algoritmos-
python/algoritmos-grafos/representacao-grafos/ 
Acesso: 24/01/2021 
 
Matemática para gente grande. Matemática Discreta II. 
Disponível em: 
https://www.youtube.com/playlist?list=PL8aWdrmfXHiJU_V_c2vM1dCFDh_Z93BeZ 
Acesso: 22/01/2021

Continue navegando