Grafos 
Samyra Lara 
Graduanda em Tecnologia em 
Sistemas para Internet – IFPB, 
campus João Pessoa.
Porque aprender Grafos? 
Estamos conhecendo: GRAFOS 
 Importante ferramenta matemática com aplicação em diversas áreas 
do conhecimento como: genética, química, pesquisa operacional, 
telecomunicações, engenharia elétrica, redes de computadores, 
conexão de voos aéreos, restrições de precedência, fluxo de 
programas, dentro outros; 
 Utilizados na definição e/ou resolução de problemas; 
 Existem centenas de problemas computacionais que empregam 
grafos com sucesso;
Porque aprender Grafos? 
Que tal começar pela Conectividade Social? 
Estamos conhecendo: GRAFOS
Aplicação Prática: Voos aéreos 
WebJet Linhas Aéreas: http://www.webjet.com.br 
Estamos conhecendo: GRAFOS
Definição de Grafos 
 É um conceito matemático que basicamente estuda os elementos de um 
conjunto e a relação entre eles; 
Definição matemática: 
G = {V, A} 
 V : Vértices (elementos); 
 A: Arestas ou Arcos (relações entre elementos); 
|V| e |A| representam a cardinalidade dos conjuntos V e A, isto é, número de 
elementos dos respectivos conjuntos. 
Terminologias: vértice = nós ; aresta = arco. 
Pode variar conforme o autor. 
Estamos conhecendo: GRAFOS
Definição e Notação 
 Exemplo: 
G={V,A} 
V={1,2,3,4,5,6} 
A={ (6,4), (4,3), (4,5), (4,6), (5,2), (5,1), (5,4) 
(3,2), (3,4), (2,5), (2,3), (2,1), (1,2), (1,5) } 
|V| = 6 
|A| = 14 
Estamos conhecendo: GRAFOS
Tipos de Grafos 
 NÃO-DIRIGIDOS: 
As arestas indicam uma conexão bidirecional 
 DIRIGIDOS: 
 As arestas determinam o sentido da conexão 
através de uma seta; 
Faz distinção entre origem e destino; 
Convenção: 
aresta: GND / arco: GD 
Estamos conhecendo: GRAFOS
Grafo dirigido 
 Exemplo de Grafo Dirigido 
G = {V,A} 
V = {0,1,2,3} 
A = { {0,1}, {0,3}, {1,2}, {1,3}, {2,3}, {2,2} , {3,0}} 
|V| = 4 
|A| = 7 
Estamos conhecendo: GRAFOS
Conceitos Básicos 
 Vértice Adjacente 
Vértices ligados por uma aresta 
Exemplo: 
• Vértice 1 é adjacente a 0 
• Vértice 1 é adjacente a 2 
 Aresta Incidente 
Uma aresta/arco que conecta dois vértices em particular 
Exemplo: 
• A aresta (0,1) é incidente aos vértices 0 e 1 
• O arco {3,4} é incidente de 3 ou incidente a 4 
Estamos conhecendo: GRAFOS 
(0,1)
Conceitos Básicos 
 Grau de um vértice 
Número de arestas/arcos incidentes a um vértice 
Exemplo: o grau do vértice “1” é 2; 
Tratando-se de Grafos dirigidos, temos: 
 Grau de Emissão: # arcos que partem de v; 
 Grau de Recepção: # arcos que chegam em v; 
Exemplo: Grau do vértice 0: 
Emissão: 2; 
Recepção: 1. 
Estamos conhecendo: GRAFOS
Grafo dirigido 
 Caminho: 
É determinado através da sequência de um ou mais arcos. É possível chegar 
até outro vértice (não adjacente), através do percurso dos arcos. 
Exemplo: 
“0” não é adjacente a “2”, é possível chegar 
até ele através dos arcos {0,1} e {1,2}. 
Estamos conhecendo: GRAFOS
Estamos conhecendo: GRAFOS 
Samyra, como eu represento isso?
Formas de representação 
1ª FORMA: Matriz de Adjacência (estática): 
A partir de um Grafo (G), dado por: 
G = (V, A); 
 n = número de vértices (n > 0). 
Consiste em uma matriz (E) quadrada (n x n), cujos elementos, são: 
 eij = 1, se a aresta <ei, ej> pertence a “A” 
 eij = 0, caso contrário. 
Estamos conhecendo: GRAFOS
Matriz de Adjacência 
Como montar essa matriz de adjacência ? 
1. Identificar a quantidade de vértices; 
2. Montar uma matriz com essa quantidade; 
3. Usar a regra (slide anterior) para determinar os 
elementos dessa matriz. 
Estamos conhecendo: GRAFOS
Matriz de Adjacência 
• O Grafo (G), possui 6 vértices. 
• Implica dizer que a matriz será 
composta por 6 linhas e 6 colunas. 
Estamos conhecendo: GRAFOS 
GRAFO G
Matriz de Adjacência 
 Matriz 6 x 6: 
Estamos conhecendo: GRAFOS
Matriz de Adjacência 
Vantagens: 
 Fácil visualização dos dados; 
 Pesquisas são facilmente respondidas: 
Quantidade de arestas/arcos do grafo; 
Grau de cada vértice; 
Existência de caminhos; 
Existência de ciclos; 
Existência de Laços (loop). 
Estamos conhecendo: GRAFOS
Matriz de Adjacência 
Desvantagens: 
Estamos conhecendo: GRAFOS 
 Geralmente essa matriz de representação é esparsa, uma vez que, são 
representados, mesmo que não existam, arestas/arcos entre os 
vértices; 
 Piorando a situação, as aplicações reais costumam não possuir 
limitações quanto ao número de vértices.
Formas de representação 
Estamos conhecendo: GRAFOS 
2ª FORMA: Lista de Adjacências (dinâmica) 
• É uma lista (L), onde cada nó possui uma lista de seus vértices 
adjacentes.
Lista de Adjacências 
Como montar essa lista de adjacência ? 
Estamos conhecendo: GRAFOS 
1. Identificar a quantidade de vértices; 
2. Montar uma lista com essa quantidade (nó); 
3. Cada nó dessa lista contém a identificação do vértice de um 
apontador para o próximo vértice, cujo valor será nulo (zero ou 
NULL) quando for o fim da lista.
Lista de Adjacências 
Estamos conhecendo: GRAFOS 
Exemplo: 
 Qual seria a representação do Grafo (G), usando a representação 
“Lista de Adjacência” ?
Lista de Adjacências 
Vantagens: 
• Fácil visualização dos dados; 
• Ocupa pouco espaço; 
• Fácil responder as perguntas. 
Desvantagens: 
• Complica “um pouco” a implementação. 
Estamos conhecendo: GRAFOS
Percursos 
Algumas regras 
Estamos conhecendo: GRAFOS 
 A partir de uma ordem pré-estabelecida, os vértices de um grafo são 
percorridos, a partir de um deles; 
 Todos os caminhos relacionados a um vértices devem ser percorridos; 
 A escolha desse vértice inicial pode ser aleatório ou predefinido; 
 Geralmente a ideia é descobrir o melhor caminho, ou seja, o de 
menor comprimento.
Percursos 
Algumas regras 
Estamos conhecendo: GRAFOS 
 É necessário que o algoritmo, de percurso, defina o primeiro “nó” a 
ser visitado, podendo ser: 
 Escolhido; 
Será selecionado aleatoriamente. 
 Também deve ser definido a ordem que será seguida para visitar os 
“nó” sucessores a um determinado “nó”.
Percursos 
Observações 
Estamos conhecendo: GRAFOS 
 Em um grafo nem sempre é possível atingir todos os demais “nó” a 
partir do “nó” inicial; 
 Não existe uma sequência natural entre os sucessores de um 
determinado “nó”;
Tipos de Percursos 
 Pesquisa Inicial em Profundidade (DFS): 
“Depth First Search”. 
 Pesquisa Inicial em Largura (BFS): 
“Breadth First Search”. 
Estamos conhecendo: GRAFOS
Pesquisa em profundidade (DFS) 
Estamos conhecendo: GRAFOS 
Faz uma análise nos arcos de um grafo.
Pesquisa em profundidade (DFS) 
Estamos conhecendo: GRAFOS 
A busca em profundidade procura acessar todos os vértices em um 
grafo. Para acessar todos os possíveis vértices, varre a lista de arestas 
de cada vértice do grafo.
Pesquisa em profundidade (DFS) 
empilha primeiro vértice (origem) 
repita enquanto pilha não vazia{ 
"V" <- vértice do topo da pilha 
se (existir vértice adjacente){ 
remove o arco que está incidindo 
se o vértice adjacente não está marcado{ 
marca o vértice adjacente 
empilha o vértice adjacente 
} 
} 
senao desempilha "V" 
} 
Estamos conhecendo: GRAFOS
Pesquisa em amplitude (BFS) 
Estamos conhecendo: GRAFOS 
Faz uma análise nos vértices de um grafo.
Pesquisa em amplitude (BFS) 
Estamos conhecendo: GRAFOS 
Dado um grafo e um vértice de origem, a busca em largura 
explora as arestas do grafo até explorar todos os vértices 
alcançáveis a partir do vértice de origem.
Pesquisa em amplitude (BFS) 
insere o primeiro vértice na fila 
repita enquanto fila não vazia{ 
"V" <- primeiro vértice da fila 
repita para todos os arcos incidentes a "V“ (adjac.){ 
se (vértice adjacente não está marcado){ 
marca o vértice adjacente 
insere o vértice adjacente no final da fila 
} 
} 
remova o vértice da fila 
} 
Estamos conhecendo: GRAFOS
Vamos ao código... 
Estamos conhecendo: GRAFOS
REFERÊNCIAS 
Estamos conhecendo: GRAFOS 
• Material do Curso de Extensão de Grafos, ministrado pelo Professor 
M.Sc. Alex Sandro da Cunha Rêgo; 
• Material do Projeto Olímpico de Programação, ministrado pela Ms. 
Valéria Maria Bezerra Cavalcanti; 
• ASCENCIO, A. F. G.; ARAÚJO, G. S.. Estrutura de Dados: Algoritmos, 
análise da Complexidade e Implementações em Java e 
C/C++. Editora PEARSON, 2010. 
• VELOSO, Paulo.; SANTOS, Clesio dos; AZEREDO, Paulo; FURTADO, 
Antonio Estruturas de Dados. Rio de Janeiro: Editora Campus, 1984.

Seminário sobre Grafos por Samyra Lara

  • 1.
    Grafos Samyra Lara Graduanda em Tecnologia em Sistemas para Internet – IFPB, campus João Pessoa.
  • 2.
    Porque aprender Grafos? Estamos conhecendo: GRAFOS  Importante ferramenta matemática com aplicação em diversas áreas do conhecimento como: genética, química, pesquisa operacional, telecomunicações, engenharia elétrica, redes de computadores, conexão de voos aéreos, restrições de precedência, fluxo de programas, dentro outros;  Utilizados na definição e/ou resolução de problemas;  Existem centenas de problemas computacionais que empregam grafos com sucesso;
  • 3.
    Porque aprender Grafos? Que tal começar pela Conectividade Social? Estamos conhecendo: GRAFOS
  • 4.
    Aplicação Prática: Voosaéreos WebJet Linhas Aéreas: http://www.webjet.com.br Estamos conhecendo: GRAFOS
  • 5.
    Definição de Grafos  É um conceito matemático que basicamente estuda os elementos de um conjunto e a relação entre eles; Definição matemática: G = {V, A}  V : Vértices (elementos);  A: Arestas ou Arcos (relações entre elementos); |V| e |A| representam a cardinalidade dos conjuntos V e A, isto é, número de elementos dos respectivos conjuntos. Terminologias: vértice = nós ; aresta = arco. Pode variar conforme o autor. Estamos conhecendo: GRAFOS
  • 6.
    Definição e Notação  Exemplo: G={V,A} V={1,2,3,4,5,6} A={ (6,4), (4,3), (4,5), (4,6), (5,2), (5,1), (5,4) (3,2), (3,4), (2,5), (2,3), (2,1), (1,2), (1,5) } |V| = 6 |A| = 14 Estamos conhecendo: GRAFOS
  • 7.
    Tipos de Grafos  NÃO-DIRIGIDOS: As arestas indicam uma conexão bidirecional  DIRIGIDOS:  As arestas determinam o sentido da conexão através de uma seta; Faz distinção entre origem e destino; Convenção: aresta: GND / arco: GD Estamos conhecendo: GRAFOS
  • 8.
    Grafo dirigido Exemplo de Grafo Dirigido G = {V,A} V = {0,1,2,3} A = { {0,1}, {0,3}, {1,2}, {1,3}, {2,3}, {2,2} , {3,0}} |V| = 4 |A| = 7 Estamos conhecendo: GRAFOS
  • 9.
    Conceitos Básicos Vértice Adjacente Vértices ligados por uma aresta Exemplo: • Vértice 1 é adjacente a 0 • Vértice 1 é adjacente a 2  Aresta Incidente Uma aresta/arco que conecta dois vértices em particular Exemplo: • A aresta (0,1) é incidente aos vértices 0 e 1 • O arco {3,4} é incidente de 3 ou incidente a 4 Estamos conhecendo: GRAFOS (0,1)
  • 10.
    Conceitos Básicos Grau de um vértice Número de arestas/arcos incidentes a um vértice Exemplo: o grau do vértice “1” é 2; Tratando-se de Grafos dirigidos, temos:  Grau de Emissão: # arcos que partem de v;  Grau de Recepção: # arcos que chegam em v; Exemplo: Grau do vértice 0: Emissão: 2; Recepção: 1. Estamos conhecendo: GRAFOS
  • 11.
    Grafo dirigido Caminho: É determinado através da sequência de um ou mais arcos. É possível chegar até outro vértice (não adjacente), através do percurso dos arcos. Exemplo: “0” não é adjacente a “2”, é possível chegar até ele através dos arcos {0,1} e {1,2}. Estamos conhecendo: GRAFOS
  • 12.
    Estamos conhecendo: GRAFOS Samyra, como eu represento isso?
  • 13.
    Formas de representação 1ª FORMA: Matriz de Adjacência (estática): A partir de um Grafo (G), dado por: G = (V, A);  n = número de vértices (n > 0). Consiste em uma matriz (E) quadrada (n x n), cujos elementos, são:  eij = 1, se a aresta <ei, ej> pertence a “A”  eij = 0, caso contrário. Estamos conhecendo: GRAFOS
  • 14.
    Matriz de Adjacência Como montar essa matriz de adjacência ? 1. Identificar a quantidade de vértices; 2. Montar uma matriz com essa quantidade; 3. Usar a regra (slide anterior) para determinar os elementos dessa matriz. Estamos conhecendo: GRAFOS
  • 15.
    Matriz de Adjacência • O Grafo (G), possui 6 vértices. • Implica dizer que a matriz será composta por 6 linhas e 6 colunas. Estamos conhecendo: GRAFOS GRAFO G
  • 16.
    Matriz de Adjacência  Matriz 6 x 6: Estamos conhecendo: GRAFOS
  • 17.
    Matriz de Adjacência Vantagens:  Fácil visualização dos dados;  Pesquisas são facilmente respondidas: Quantidade de arestas/arcos do grafo; Grau de cada vértice; Existência de caminhos; Existência de ciclos; Existência de Laços (loop). Estamos conhecendo: GRAFOS
  • 18.
    Matriz de Adjacência Desvantagens: Estamos conhecendo: GRAFOS  Geralmente essa matriz de representação é esparsa, uma vez que, são representados, mesmo que não existam, arestas/arcos entre os vértices;  Piorando a situação, as aplicações reais costumam não possuir limitações quanto ao número de vértices.
  • 19.
    Formas de representação Estamos conhecendo: GRAFOS 2ª FORMA: Lista de Adjacências (dinâmica) • É uma lista (L), onde cada nó possui uma lista de seus vértices adjacentes.
  • 20.
    Lista de Adjacências Como montar essa lista de adjacência ? Estamos conhecendo: GRAFOS 1. Identificar a quantidade de vértices; 2. Montar uma lista com essa quantidade (nó); 3. Cada nó dessa lista contém a identificação do vértice de um apontador para o próximo vértice, cujo valor será nulo (zero ou NULL) quando for o fim da lista.
  • 21.
    Lista de Adjacências Estamos conhecendo: GRAFOS Exemplo:  Qual seria a representação do Grafo (G), usando a representação “Lista de Adjacência” ?
  • 22.
    Lista de Adjacências Vantagens: • Fácil visualização dos dados; • Ocupa pouco espaço; • Fácil responder as perguntas. Desvantagens: • Complica “um pouco” a implementação. Estamos conhecendo: GRAFOS
  • 23.
    Percursos Algumas regras Estamos conhecendo: GRAFOS  A partir de uma ordem pré-estabelecida, os vértices de um grafo são percorridos, a partir de um deles;  Todos os caminhos relacionados a um vértices devem ser percorridos;  A escolha desse vértice inicial pode ser aleatório ou predefinido;  Geralmente a ideia é descobrir o melhor caminho, ou seja, o de menor comprimento.
  • 24.
    Percursos Algumas regras Estamos conhecendo: GRAFOS  É necessário que o algoritmo, de percurso, defina o primeiro “nó” a ser visitado, podendo ser:  Escolhido; Será selecionado aleatoriamente.  Também deve ser definido a ordem que será seguida para visitar os “nó” sucessores a um determinado “nó”.
  • 25.
    Percursos Observações Estamosconhecendo: GRAFOS  Em um grafo nem sempre é possível atingir todos os demais “nó” a partir do “nó” inicial;  Não existe uma sequência natural entre os sucessores de um determinado “nó”;
  • 26.
    Tipos de Percursos  Pesquisa Inicial em Profundidade (DFS): “Depth First Search”.  Pesquisa Inicial em Largura (BFS): “Breadth First Search”. Estamos conhecendo: GRAFOS
  • 27.
    Pesquisa em profundidade(DFS) Estamos conhecendo: GRAFOS Faz uma análise nos arcos de um grafo.
  • 28.
    Pesquisa em profundidade(DFS) Estamos conhecendo: GRAFOS A busca em profundidade procura acessar todos os vértices em um grafo. Para acessar todos os possíveis vértices, varre a lista de arestas de cada vértice do grafo.
  • 29.
    Pesquisa em profundidade(DFS) empilha primeiro vértice (origem) repita enquanto pilha não vazia{ "V" <- vértice do topo da pilha se (existir vértice adjacente){ remove o arco que está incidindo se o vértice adjacente não está marcado{ marca o vértice adjacente empilha o vértice adjacente } } senao desempilha "V" } Estamos conhecendo: GRAFOS
  • 30.
    Pesquisa em amplitude(BFS) Estamos conhecendo: GRAFOS Faz uma análise nos vértices de um grafo.
  • 31.
    Pesquisa em amplitude(BFS) Estamos conhecendo: GRAFOS Dado um grafo e um vértice de origem, a busca em largura explora as arestas do grafo até explorar todos os vértices alcançáveis a partir do vértice de origem.
  • 32.
    Pesquisa em amplitude(BFS) insere o primeiro vértice na fila repita enquanto fila não vazia{ "V" <- primeiro vértice da fila repita para todos os arcos incidentes a "V“ (adjac.){ se (vértice adjacente não está marcado){ marca o vértice adjacente insere o vértice adjacente no final da fila } } remova o vértice da fila } Estamos conhecendo: GRAFOS
  • 33.
    Vamos ao código... Estamos conhecendo: GRAFOS
  • 34.
    REFERÊNCIAS Estamos conhecendo:GRAFOS • Material do Curso de Extensão de Grafos, ministrado pelo Professor M.Sc. Alex Sandro da Cunha Rêgo; • Material do Projeto Olímpico de Programação, ministrado pela Ms. Valéria Maria Bezerra Cavalcanti; • ASCENCIO, A. F. G.; ARAÚJO, G. S.. Estrutura de Dados: Algoritmos, análise da Complexidade e Implementações em Java e C/C++. Editora PEARSON, 2010. • VELOSO, Paulo.; SANTOS, Clesio dos; AZEREDO, Paulo; FURTADO, Antonio Estruturas de Dados. Rio de Janeiro: Editora Campus, 1984.