Sei sulla pagina 1di 19

CNEC Gravata

Estrutura
de
Dados
ED09
Prof. Giovane Barcelos
giovane@professor.facensa.edu.br

Plano de Ensino
Grafos

Contedo Programtico:
1. Reviso e Flashback dos Algoritmos
2. Vetores e Matrizes
3. Ordenao Simples
4. Pilhas e Filas
5. Listas Sequenciais e Encadeadas
6. Listas Duplamente Encadeadas
7. Recursividade
8. rvores Binrias
9. Grafos
10. Tabelas Hash

Pg. 2

GoByz

De 19

Grafos

O que so grafos?
So estruturas similares as rvores
Na matemtica, o grafo um tipo de rvore
Em computao, grafos so utilizados de forma
diferente de rvores
Em rvores binrias fcil inserir e pesquisar dados.
As arestas representam um mtodo rpido para
acessar nodo a nodo
Em grafos, por exemplo, nodos poderiam representar
cidades, enquanto as arestas poderiam representar
as rotas areas entre as cidades, ou seja, ao
poderamos ter N conexes saindo de um nodo
Em grafos, nodos so tradicionalmente chamados de
vrtices
Pg. 3

GoByz

De 19

Grafos

Terminologia
Adjacente (Adjacency): Dois vrtices so ditos
adjacentes se forem conectados por apenas uma
aresta
Caminho (Path): Um caminho uma sequencia de
arestas
Grafo conectado (Connected Graphs): Um grafo
dito conectado se houver pelo menos um caminho
que leve de um vrtice a outro

Pg. 4

GoByz

De 19

Grafos

Exemplo

Pg. 5

GoByz

De 19

Grafos

Mais conceitos ...


Um grafo sem conexo consiste de mais de um grafo
sem conexo entre eles
Grafo no direcionado aquele que no existe uma
direo definida, como os apresentados abaixo:

Grafo Conectado
Pg. 6

Grafo No Conectado
GoByz

De 19

Grafos

Um pouco de histria
Um dos primeiros matemticos a trabalhar com
Grafos foi Leonhard Euler em 1736
Ele resolveu o problema conhecido como sete pontes
de Knigsberg
O problema era decidir se possvel seguir um
caminho que atravessa cada uma das pontes
exatamente uma vez e retornar ao ponto de partida

Pg. 7

GoByz

De 19

Grafos

Como representar um grafo em um programa?


Vrtice:
Geralmente representado como um objeto que
contm uma chave (rtulo) e um sinalizador usado
para algoritmos de pesquisa
Podem ser armazenados em um array e
referenciados por seu nmero de ndice
Aresta:
Normalmente so utilizados dois mtodos para
representar arestas em grafos: matriz de
adjacncias e lista de adjacncias

Pg. 8

GoByz

De 19

Grafos

Como representada a matriz de adjacncia?


Uma matriz de adjacncia uma matriz
bidimensional em que os elementos indicam se uma
aresta est presente entre dois vrtices
Se um grafo tem N vrtices, uma matriz de
adjacncia um array N x N
A

Uma conexo entre dois vrtices representada pelo


nmero 1, a sua ausncia 0
Pg. 9

GoByz

De 19

Grafos

Como representada uma lista de adjacncia?


Uma lista de adjacncia uma matriz de listas ou
uma lista de listas
Cada lista individual mostra quais vrtices um dado
vrtice adjacente
Vrtice
A
B
C
D

Lista de Vrtices Adjacentes


BCD
AD
A
AB

Cada elo da lista um vrtice


O contedo da lista de adjacncia no so caminhos

Pg. 10

GoByz

De 19

Grafos

Exemplo de cdigo para representar um Grafo

Exemplo de Cdigo

Pg. 11

GoByz

De 19

Grafos

Como adicionar vrtices e arestas a um grafo?


Para adicionar um vrtice, crie um novo objeto
vrtice e insira no seu array de vrtices
Para adicionar uma aresta/conexo:
Se for uma matriz de adjacncias sinalize na
matriz os nmeros correspondentes as duas
posies (arestas) do array que se deseja
conectar. Ex:
matriz[1][3] = 1;
matriz[3][1] = 1;
Se for uma lista de adjacncias poderia inserir 1
na lista do 3, e um 3 na lista do 1

Pg. 12

GoByz

De 19

Grafos

Exemplo de cdigo para adicionar arestas e vrtices

Exemplo de Cdigo

Pg. 13

GoByz

De 19

Grafos

Como pesquisar em grafos?


Uma das operaes fundamentais em um grafo
encontrar quais vrtices podem ser alcanados a
partir de um vrtice especificado
Por exemplo: quantas ruas podem ser alcanadas
pegando o nibus TM2?
Existem duas abordagens comuns para pesquisar em
um grafo:
Busca em profundidade (Depth-First Search
DFS ) implementada com pilha
Busca em largura (Breadth-First Search BFS)
implementada com fila
Ambos acabaro por chegar a todos os vrtices
ligados
Pg. 14

GoByz

De 19

Grafos

Busca em profundidade (Depth-First Search DFS )


A busca em profundidade consiste em avaliar primeiro um
dos ns e, se este no for soluo, avaliar um de seus
filhos, repetindo este passo at chegar a um n que no
possui filho ou cujos filhos j foram todos avaliados,
sendo ento obrigado a voltar para o n pai
A busca em profundidade usa uma pilha para se lembrar
onde ele deve ir quando chega a um beco sem sada

Os nmeros nesta figura


mostram a ordem em
que os vrtices so
visitados

Pg. 15

GoByz

De 19

Grafos

Exemplo de cdigo busca em profundidade (DFS)

Exemplo de Cdigo

Pg. 16

GoByz

De 19

Grafos

Busca em largura (Breadth-First Search BFS)


O algoritmo de busca em largura comea pelo n raiz
e explora todos os ns vizinhos. Ento, para cada um
desses ns mais prximos, explora os seus ns
vizinhos inexplorados e assim por diante, at que ele
encontre o alvo da busca
Este tipo de pesquisa implementada utilizando uma
fila, em vez de uma pilha
Os nmeros nesta figura
mostram a ordem em
que os vrtices so
visitados

Pg. 17

GoByz

De 19

Grafos

Exemplo de cdigo busca em largura (BFS)

Exemplo de Cdigo

Pg. 18

GoByz

De 19

Vamos Praticar

Pg. 19

GoByz

De 19

Potrebbero piacerti anche