SlideShare una empresa de Scribd logo
1 de 159
TREINAMENTO PARA
 COMPETIÇÕES DE
 PROGRAMAÇÃO
GRAFOS PARTE 1
                   TAP
             TURMA INICIANTE




Murilo Adriano Vasconcelos e Paulo Cezar P. Costa - INF/UFG
                                http://murilo.wordpress.com



                  1
Grafos: Introdução




        2
Grafos

• O que é um grafo?
• Tipos de grafos
• Representações de grafos
• Algoritmos de busca
• Aplicações dos algoritmos de busca
                    3
O que é um grafo?

• Uma representação abstrata que pode ser
  usada para descrever a organização de
  sistemas de transportes, interações
  humanas, redes de telecomunicação entre
  outros.



                    4
O que é um grafo?

Matematicamente denotado como:
G = (V, E), onde V é o conjunto de vértices
e E o conjunto de arestas (edges) formado
por pares ordenados ou não de vértices do
conjunto V.



                    5
Tipos de grafos

• Direcionados / Não-direcionados
• Ponderados / Não-ponderados
• Cíclicos / Acíclicos
• Esparsos / Densos

                    6
Grafos Não-Direcionados


• Um grafo G(V, E) é dito não-
  direcionado se a existência de uma
  aresta (u, v) ∈ E implica que a aresta (v, u)
  também pertence a E

• Estradas interligando cidades são exemplos
  de relações que podem ser representadas
  por grafos não-direcionados uma vez que
  as estradas possuem duplo sentido


                      7
Grafos Direcionados



• Se a presença de uma aresta (u, v) não
  implica na existência da aresta (v, u) então
  dizemos que o grafo é direcionado

• Ruas de uma cidade podem ser vistas como
  um grafo direcionado pois nem todas as
  ruas possuem mão-dupla.



                      8
Grafos Não-Direcionados / Direcionados




    Não-direcionado       Direcionado

                                 *Figuras retiradas de [TADM] p.147




                      9
Grafos Ponderados

• Em um grafo ponderado, cada aresta (ou
  vértice) possui um valor que pode denotar
  o peso, custo, ganho etc.
• Em um grafo representando as cidades e as
  estradas que as interligam, os valores das
  arestas podem representar, por exemplo, o
  comprimento, o tempo de direção, o limite
  de velocidade ou o custo do pedágio de
  cada estrada.

                    10
Grafos Não-ponderados



• Em um grafo não-ponderado, não há
  distinção de custo ou valor entre as
  arestas. Isto é, cada aresta possui o mesmo
  valor.
• Este tipo de grafo é utilizado quando o que
  importa são somente os relacionamentos.



                     11
Grafos Não-Ponderados / Ponderados




   Não-ponderado        Ponderado

                              *Figuras retiradas de [TADM] p.147




                   12
Grafos Cíclicos



• Um grafo cíclico é um grafo que não
  contém ciclos, ou seja, se partindo de um
  vértice v, conseguimos chegar a um vértice
  u, então a partir de u não conseguimos
  chegar novamente a v a não ser voltando
  pelo caminho usado de v até u



                    13
Grafos Acíclicos



• Um grafo é acíclico se não contém ciclos
• Grafos conexos não-direcionados acíclicos?
• Árvores!!!
• Grafos direcionados acíclicos (DAGs)

                    14
Grafos Acíclicos / Cíclicos




Acíclico            Cíclico

                         *Figuras retiradas de [TADM] p.147




            15
Grafos Esparsos / Densos



• Um grafo G(V, E) é chamado esparso se
  |E| for muito menor que |V|2

• Se um grafo possui o número de arestas (|
  E|) próximo do número de vértices ao
  quadrado (|V|2), então dizemos que este
  grafo é denso.



                     16
Representações de grafos

• Duas formas principais
 • Matrizes de adjacência
 • Lista de adjacência
• É de suma importância saber identificar a
  representação correta para a resolução de
  problemas


                    17
Representações de grafos:
 Matrizes de adjacência
                  -   1   2   3   4   5
 1       2
                  1   1   1   0   1   0
                  2   1   1   0   1   0
 3       4
                  3   0   0   1   1   1

     5            4   1   1   0   1   1
                  5   0   0   1   1   1


             18
Representações de grafos:
   Matrizes de adjacência
• Vantagens:
 • Facilidade e rapidez de implementação
 • Fácil checar se a aresta (i, j) existe ou
    não
• Desvantagens:
 • Alocar uma matriz n pode não ser bom
                          2


   • Ex.: 3000 de 4 bytes! de 9,000,000
      posicões
               cidades, array


                     19
Representações de grafos:
    Listas de adjacência
• Podemos representar grafos esparsos de
  uma forma mais eficiente com listas de
  adjacência
• Cada vértice possui uma lista de vértices
  associada
• Se existe uma aresta (u, v) no grafo então a
  lista do vértice u contém o vértice v

                     20
Representações de grafos:
      Listas de adjacência
•   Vantagens
    • Menor consumo de memória (n + m)
    •   Não contém arestas inexistentes no grafo
        original, diminuindo assim a complexidade de
        buscas no grafo
•   Desvantagens
    •Codificação mais demorada
    •Checar se a aresta (u, v) existe é mais
     demorado


                           21
Representações de grafos:
         Comparativo
        Comparação                                  Vencedor
Checar se (u, v) pertence ao grafo                  matrizes de adjacência O(1)
Checar o grau de um vértice                                   listas de ajacência

Memória em grafos pequenos                     listas de adjacência (n + m) vs n2

Inserção ou remoção de arestas             matrizes de adjacência O(1) vs O(d)

Busca em grafos                            listas de ajacência Θ(m + n) vs Θ(n2)

Velocidade de implementação                              matrizes de adjacência

Melhor para a maioria dos problemas                           listas de ajacência
                                                                  *Sugerido por [TADM] p.152




                                      22
Implementação: Matrizes de adjacência

// Declarando
const int MAX_VERTICES = 100;
tipo grafo[MAX_VERTICES][MAX_VERTICES];

// Inicializando
for (int i = 0; i < num_arestas; ++i)
    for (int j = i; j < num_arestas; ++j)
        grafo[i][j] = grafo[j][i] = 0;

// Populando
int u, v;
for (int i = 0; i < num_arestas; ++i) {
    cin >> u >> v;
    grafo[u][v] = w;
    // grafo[v][u] = w; se não for direcionado
    // grafo[u][v] = true; se não for ponderado
}




                        23
Implementação: Listas de adjacência
#include <list> // std::list
#include <utility> // pair<> e make_pair()
using namespace std;

// Declarando
const int MAX_VERTICES = 100;
list< pair<tipo, int> > grafo[MAX_VERTICES];

// Inicializando
for (int i = 0; i < num_arestas; ++i)
        grafo[i].clear();

// Populando
int u, v, w;
for (int i = 0; i < num_arestas; ++i) {
    cin >> u >> v >> w;
    grafo[u].push_back(make_pair(v,w));
}

Nem tão mais complicado assim... :)


                        24
Algoritmos de busca em grafos



• Dois principais:
 • Busca em largura (ou Breadth-First Search
    - BFS)

 • Busca em profundidade (ou Depth-First
    Search - DFS)




                     25
Algoritmos de busca em grafos - Busca em largura


 • Expande todos os vizinhos de um vértice
    primeiro:




                       26
Algoritmos de busca em grafos - Busca em largura


 • Expande todos os vizinhos de um vértice
    primeiro:




                       26
Algoritmos de busca em grafos - Busca em largura


 • Expande todos os vizinhos de um vértice
    primeiro:




                       26
Algoritmos de busca em grafos - Busca em largura


 • Expande todos os vizinhos de um vértice
    primeiro:




                       26
Algoritmos de busca em grafos - Busca em largura


 • Expande todos os vizinhos de um vértice
    primeiro:




                       26
Algoritmos de busca em grafos - Busca em largura


 • Expande todos os vizinhos de um vértice
    primeiro:




                       26
Algoritmos de busca em grafos - Busca em largura


 • Expande todos os vizinhos de um vértice
    primeiro:




                       26
Algoritmos de busca em grafos - Busca em largura


 • Expande todos os vizinhos de um vértice
    primeiro:




                       26
Algoritmos de busca em grafos - Busca em largura


 • Expande todos os vizinhos de um vértice
    primeiro:




                       26
Algoritmos de busca em grafos - Busca em largura


 • Expande todos os vizinhos de um vértice
    primeiro:




                       26
Algoritmos de busca em grafos - Busca em largura


 • Expande todos os vizinhos de um vértice
    primeiro:




                       26
Algoritmos de busca em grafos - Busca em largura


 • Expande todos os vizinhos de um vértice
    primeiro:




                       26
Algoritmos de busca em grafos - Busca em largura


 • Expande todos os vizinhos de um vértice
    primeiro:




                       26
Algoritmos de busca em grafos - Busca em largura


 • Expande todos os vizinhos de um vértice
    primeiro:




                       26
Algoritmos de busca em grafos - Busca em largura


 • Expande todos os vizinhos de um vértice
    primeiro:




                       26
Algoritmos de busca em grafos - Busca em largura


 • Expande todos os vizinhos de um vértice
    primeiro:




                       26
Algoritmos de busca em grafos - Busca em largura


 • Expande todos os vizinhos de um vértice
    primeiro:




                       26
Algoritmos de busca em grafos - Busca em largura


 • Expande todos os vizinhos de um vértice
    primeiro:




                       26
Algoritmos de busca em grafos - Busca em largura


 • Expande todos os vizinhos de um vértice
    primeiro:




                       26
Algoritmos de busca em grafos - Busca em largura


 • Expande todos os vizinhos de um vértice
    primeiro:




                       26
Algoritmos de busca em grafos - Busca em largura


 • Expande todos os vizinhos de um vértice
    primeiro:




                       26
Implementação: Busca em largura

#include <list> // std::list
#include <utility> // pair<> e make_pair()
using namespace std;

// Declarando
const int MAX_VERTICES = 100;
int grafo[MAX_VERTICES][MAX_VERTICES];
bool visitado[MAX_VERTICES];


void bfs(int origem, int num_vertices) {
    for (int i = 0; i < num_vertices; ++i) {
        visitado[i] = false;
    }
    // Fila que guarda a ordem de visita dos vértices
    list<int> fila;
/*...*/




                        27
Implementação: Busca em largura
void bfs(int origem, int num_vertices) {
    for (int i = 0; i < num_vertices; ++i) {
        visitado[i] = false;
    }
    // Fila que guarda a ordem de visita dos vértices
    list<int> fila;
    // Adiciona a origem na fila
    fila.push_back(origem);
    visitado[origem] = true;

   int atual; // vértice atual que estamos visitando
   while (!fila.empty()) {
       atual = fila.front(); // pega o 1o vértice
       fila.pop_front(); // remove ele da fila
       for (int i = 0; i < num_vertices; ++i) {
           if (grafo[atual][i] && !visitado[i]) {
               lista.push_back(i);
               visited[i] = true;
           }
       }
   }



                          28
Algoritmos de busca em grafos - Busca em largura




               3
                            5
               2                 4
 0
                            6
               1



                       29
Algoritmos de busca em grafos - Busca em largura




               3
                            5
               2                 4
 0                                       0   1   2   3   4   5   6

                            6        0   -   1   1   1   0   0   0
                                     1   1   -   0   0   0   0   1

               1                     2   1   0   -   0   0   0   1
                                     3   1   0   0   -   0   1   0
                                     4   0   0   0   0   -   0   1
                                     5   0   0   0   1   0   -   0
                                     6   0   1   1   0   1   0   -




                       29
Algoritmos de busca em grafos - Busca em largura

                                         VISITADO
                                 0   1   2       3       4       5       6
                                 F   F   F       F       F       F       F

               3
                            5
               2                 4
 0                                       0   1       2   3   4       5   6

                            6        0   -   1       1   1   0       0   0
                                     1   1   -       0   0   0       0   1

               1                     2   1   0       -   0   0       0   1
                                     3   1   0       0   -   0       1   0
                                     4   0   0       0   0   -       0   1
                                     5   0   0       0   1   0       -   0
                                     6   0   1       1   0   1       0   -




                       29
Algoritmos de busca em grafos - Busca em largura

FILA: 0                                   VISITADO
                                  0   1   2       3       4       5       6
                                  F   F   F       F       F       F       F

                3
                             5
                2                 4
   0                                      0   1       2   3   4       5   6

                             6        0   -   1       1   1   0       0   0
                                      1   1   -       0   0   0       0   1

                1                     2   1   0       -   0   0       0   1
                                      3   1   0       0   -   0       1   0
                                      4   0   0       0   0   -       0   1
                                      5   0   0       0   1   0       -   0
                                      6   0   1       1   0   1       0   -




                        29
Algoritmos de busca em grafos - Busca em largura

FILA: 0                                   VISITADO
                                  0   1   2       3       4       5       6
                                  F   F   F       F       F       F       F

                3
                             5
                2                 4
   0                                      0   1       2   3   4       5   6

                             6        0   -   1       1   1   0       0   0
                                      1   1   -       0   0   0       0   1

                1                     2   1   0       -   0   0       0   1
                                      3   1   0       0   -   0       1   0
                                      4   0   0       0   0   -       0   1
                                      5   0   0       0   1   0       -   0
                                      6   0   1       1   0   1       0   -




                        29
Algoritmos de busca em grafos - Busca em largura

FILA: 0                                   VISITADO
                                  0   1   2       3       4       5       6
                                  T
                                  F   F   F       F       F       F       F

                3
                             5
                2                 4
   0                                      0   1       2   3   4       5   6

                             6        0   -   1       1   1   0       0   0
                                      1   1   -       0   0   0       0   1

                1                     2   1   0       -   0   0       0   1
                                      3   1   0       0   -   0       1   0
                                      4   0   0       0   0   -       0   1
                                      5   0   0       0   1   0       -   0
                                      6   0   1       1   0   1       0   -




                        29
Algoritmos de busca em grafos - Busca em largura

FILA: 0                                   VISITADO
                                  0   1   2       3       4       5       6
                                  T
                                  F   F   F       F       F       F       F

                3
                             5
                2                 4
   0                                      0   1       2   3   4       5   6

                             6        0   -   1       1   1   0       0   0
                                      1   1   -       0   0   0       0   1

                1                     2   1   0       -   0   0       0   1
                                      3   1   0       0   -   0       1   0
                                      4   0   0       0   0   -       0   1
                                      5   0   0       0   1   0       -   0
                                      6   0   1       1   0   1       0   -




                        29
Algoritmos de busca em grafos - Busca em largura

FILA: 0
      3                                   VISITADO
                                  0   1   2       3       4       5       6
                                  T
                                  F   F   F       F       F       F       F

                3
                             5
                2                 4
   0                                      0   1       2   3   4       5   6

                             6        0   -   1       1   1   0       0   0
                                      1   1   -       0   0   0       0   1

                1                     2   1   0       -   0   0       0   1
                                      3   1   0       0   -   0       1   0
                                      4   0   0       0   0   -       0   1
                                      5   0   0       0   1   0       -   0
                                      6   0   1       1   0   1       0   -




                        29
Algoritmos de busca em grafos - Busca em largura

FILA: 0
      3                                   VISITADO
                                  0   1   2       3       4       5       6
                                  T
                                  F   F   F       T
                                                  F       F       F       F

                3
                             5
                2                 4
   0                                      0   1       2   3   4       5   6

                             6        0   -   1       1   1   0       0   0
                                      1   1   -       0   0   0       0   1

                1                     2   1   0       -   0   0       0   1
                                      3   1   0       0   -   0       1   0
                                      4   0   0       0   0   -       0   1
                                      5   0   0       0   1   0       -   0
                                      6   0   1       1   0   1       0   -




                        29
Algoritmos de busca em grafos - Busca em largura

FILA: 0
      3                                   VISITADO
                                  0   1   2       3       4       5       6
                                  T
                                  F   F   F       T
                                                  F       F       F       F

                3
                             5
                2                 4
   0                                      0   1       2   3   4       5   6

                             6        0   -   1       1   1   0       0   0
                                      1   1   -       0   0   0       0   1

                1                     2   1   0       -   0   0       0   1
                                      3   1   0       0   -   0       1   0
                                      4   0   0       0   0   -       0   1
                                      5   0   0       0   1   0       -   0
                                      6   0   1       1   0   1       0   -




                        29
Algoritmos de busca em grafos - Busca em largura

FILA: 0 2
      3                                   VISITADO
                                  0   1   2       3       4       5       6
                                  T
                                  F   F   F       T
                                                  F       F       F       F

                3
                             5
                2                 4
   0                                      0   1       2   3   4       5   6

                             6        0   -   1       1   1   0       0   0
                                      1   1   -       0   0   0       0   1

                1                     2   1   0       -   0   0       0   1
                                      3   1   0       0   -   0       1   0
                                      4   0   0       0   0   -       0   1
                                      5   0   0       0   1   0       -   0
                                      6   0   1       1   0   1       0   -




                        29
Algoritmos de busca em grafos - Busca em largura

FILA: 0 2
      3                                   VISITADO
                                  0   1   2       3       4       5       6
                                  T
                                  F   F   T T
                                          F F             F       F       F

                3
                             5
                2                 4
   0                                      0   1       2   3   4       5   6

                             6        0   -   1       1   1   0       0   0
                                      1   1   -       0   0   0       0   1

                1                     2   1   0       -   0   0       0   1
                                      3   1   0       0   -   0       1   0
                                      4   0   0       0   0   -       0   1
                                      5   0   0       0   1   0       -   0
                                      6   0   1       1   0   1       0   -




                        29
Algoritmos de busca em grafos - Busca em largura

FILA: 0 2
      3                                   VISITADO
                                  0   1   2       3       4       5       6
                                  T
                                  F   F   T T
                                          F F             F       F       F

                3
                             5
                2                 4
   0                                      0   1       2   3   4       5   6

                             6        0   -   1       1   1   0       0   0
                                      1   1   -       0   0   0       0   1

                1                     2   1   0       -   0   0       0   1
                                      3   1   0       0   -   0       1   0
                                      4   0   0       0   0   -       0   1
                                      5   0   0       0   1   0       -   0
                                      6   0   1       1   0   1       0   -




                        29
Algoritmos de busca em grafos - Busca em largura

FILA: 0 2 1
      3                                    VISITADO
                                   0   1   2       3       4       5       6
                                   T
                                   F   F   T T
                                           F F             F       F       F

                 3
                              5
                 2                 4
   0                                       0   1       2   3   4       5   6

                              6        0   -   1       1   1   0       0   0
                                       1   1   -       0   0   0       0   1

                 1                     2   1   0       -   0   0       0   1
                                       3   1   0       0   -   0       1   0
                                       4   0   0       0   0   -       0   1
                                       5   0   0       0   1   0       -   0
                                       6   0   1       1   0   1       0   -




                         29
Algoritmos de busca em grafos - Busca em largura

FILA: 0 2 1
      3                                    VISITADO
                                   0   1   2       3       4       5       6
                                   T T T T
                                   F F F F                 F       F       F

                 3
                              5
                 2                 4
   0                                       0   1       2   3   4       5   6

                              6        0   -   1       1   1   0       0   0
                                       1   1   -       0   0   0       0   1

                 1                     2   1   0       -   0   0       0   1
                                       3   1   0       0   -   0       1   0
                                       4   0   0       0   0   -       0   1
                                       5   0   0       0   1   0       -   0
                                       6   0   1       1   0   1       0   -




                         29
Algoritmos de busca em grafos - Busca em largura

FILA: 0 2 1
      3                                    VISITADO
                                   0   1   2       3       4       5       6
                                   T T T T
                                   F F F F                 F       F       F

                 3
                              5
                 2                 4
   0                                       0   1       2   3   4       5   6

                              6        0   -   1       1   1   0       0   0
                                       1   1   -       0   0   0       0   1

                 1                     2   1   0       -   0   0       0   1
                                       3   1   0       0   -   0       1   0
                                       4   0   0       0   0   -       0   1
                                       5   0   0       0   1   0       -   0
                                       6   0   1       1   0   1       0   -




                         29
Algoritmos de busca em grafos - Busca em largura

FILA: 0 2 1
      3                                    VISITADO
                                   0   1   2       3       4       5       6
                                   T T T T
                                   F F F F                 F       F       F

                 3
                              5
                 2                 4
   0                                       0   1       2   3   4       5   6

                              6        0   -   1       1   1   0       0   0
                                       1   1   -       0   0   0       0   1

                 1                     2   1   0       -   0   0       0   1
                                       3   1   0       0   -   0       1   0
                                       4   0   0       0   0   -       0   1
                                       5   0   0       0   1   0       -   0
                                       6   0   1       1   0   1       0   -




                         29
Algoritmos de busca em grafos - Busca em largura

FILA: 0 2 1
      2
      31                                   VISITADO
                                   0   1   2       3       4       5       6
                                   T T T T
                                   F F F F                 F       F       F

                 3
                              5
                 2                 4
   0                                       0   1       2   3   4       5   6

                              6        0   -   1       1   1   0       0   0
                                       1   1   -       0   0   0       0   1

                 1                     2   1   0       -   0   0       0   1
                                       3   1   0       0   -   0       1   0
                                       4   0   0       0   0   -       0   1
                                       5   0   0       0   1   0       -   0
                                       6   0   1       1   0   1       0   -




                         29
Algoritmos de busca em grafos - Busca em largura

FILA: 0 2 1
      2
      31                                   VISITADO
                                   0   1   2       3       4       5       6
                                   T T T T
                                   F F F F                 F       F       F

                 3
                              5
                 2                 4
   0                                       0   1       2   3   4       5   6

                              6        0   -   1       1   1   0       0   0
                                       1   1   -       0   0   0       0   1

                 1                     2   1   0       -   0   0       0   1
                                       3   1   0       0   -   0       1   0
                                       4   0   0       0   0   -       0   1
                                       5   0   0       0   1   0       -   0
                                       6   0   1       1   0   1       0   -




                         29
Algoritmos de busca em grafos - Busca em largura

FILA: 0 2 1
      2
      315                                  VISITADO
                                   0   1   2       3       4       5       6
                                   T T T T
                                   F F F F                 F       F       F

                 3
                              5
                 2                 4
   0                                       0   1       2   3   4       5   6

                              6        0   -   1       1   1   0       0   0
                                       1   1   -       0   0   0       0   1

                 1                     2   1   0       -   0   0       0   1
                                       3   1   0       0   -   0       1   0
                                       4   0   0       0   0   -       0   1
                                       5   0   0       0   1   0       -   0
                                       6   0   1       1   0   1       0   -




                         29
Algoritmos de busca em grafos - Busca em largura

FILA: 0 2 1
      2
      315                                  VISITADO
                                   0   1   2       3       4       5       6
                                   T T T T
                                   F F F F                 F   T
                                                               F           F

                 3
                              5
                 2                 4
   0                                       0   1       2   3   4       5   6

                              6        0   -   1       1   1   0       0   0
                                       1   1   -       0   0   0       0   1

                 1                     2   1   0       -   0   0       0   1
                                       3   1   0       0   -   0       1   0
                                       4   0   0       0   0   -       0   1
                                       5   0   0       0   1   0       -   0
                                       6   0   1       1   0   1       0   -




                         29
Algoritmos de busca em grafos - Busca em largura

FILA: 0 2 1
      2
      315                                  VISITADO
                                   0   1   2       3       4       5       6
                                   T T T T
                                   F F F F                 F   T
                                                               F           F

                 3
                              5
                 2                 4
   0                                       0   1       2   3   4       5   6

                              6        0   -   1       1   1   0       0   0
                                       1   1   -       0   0   0       0   1

                 1                     2   1   0       -   0   0       0   1
                                       3   1   0       0   -   0       1   0
                                       4   0   0       0   0   -       0   1
                                       5   0   0       0   1   0       -   0
                                       6   0   1       1   0   1       0   -




                         29
Algoritmos de busca em grafos - Busca em largura

FILA: 0 2 1
      2
      315                                  VISITADO
                                   0   1   2       3       4       5       6
                                   T T T T
                                   F F F F                 F   T
                                                               F           F

                 3
                              5
                 2                 4
   0                                       0   1       2   3   4       5   6

                              6        0   -   1       1   1   0       0   0
                                       1   1   -       0   0   0       0   1

                 1                     2   1   0       -   0   0       0   1
                                       3   1   0       0   -   0       1   0
                                       4   0   0       0   0   -       0   1
                                       5   0   0       0   1   0       -   0
                                       6   0   1       1   0   1       0   -




                         29
Algoritmos de busca em grafos - Busca em largura

FILA: 0 2 1
      1
      25
      315                                  VISITADO
                                   0   1   2       3       4       5       6
                                   T T T T
                                   F F F F                 F   T
                                                               F           F

                 3
                              5
                 2                 4
   0                                       0   1       2   3   4       5   6

                              6        0   -   1       1   1   0       0   0
                                       1   1   -       0   0   0       0   1

                 1                     2   1   0       -   0   0       0   1
                                       3   1   0       0   -   0       1   0
                                       4   0   0       0   0   -       0   1
                                       5   0   0       0   1   0       -   0
                                       6   0   1       1   0   1       0   -




                         29
Algoritmos de busca em grafos - Busca em largura

FILA: 0 2 1
      1
      25
      315                                  VISITADO
                                   0   1   2       3       4       5       6
                                   T T T T
                                   F F F F                 F   T
                                                               F           F

                 3
                              5
                 2                 4
   0                                       0   1       2   3   4       5   6

                              6        0   -   1       1   1   0       0   0
                                       1   1   -       0   0   0       0   1

                 1                     2   1   0       -   0   0       0   1
                                       3   1   0       0   -   0       1   0
                                       4   0   0       0   0   -       0   1
                                       5   0   0       0   1   0       -   0
                                       6   0   1       1   0   1       0   -




                         29
Algoritmos de busca em grafos - Busca em largura

FILA: 0 2 1
      1
      256
      315                                  VISITADO
                                   0   1   2       3       4       5       6
                                   T T T T
                                   F F F F                 F   T
                                                               F           F

                 3
                              5
                 2                 4
   0                                       0   1       2   3   4       5   6

                              6        0   -   1       1   1   0       0   0
                                       1   1   -       0   0   0       0   1

                 1                     2   1   0       -   0   0       0   1
                                       3   1   0       0   -   0       1   0
                                       4   0   0       0   0   -       0   1
                                       5   0   0       0   1   0       -   0
                                       6   0   1       1   0   1       0   -




                         29
Algoritmos de busca em grafos - Busca em largura

FILA: 0 2 1
      1
      256
      315                                  VISITADO
                                   0   1   2       3       4       5       6
                                   T T T T
                                   F F F F                 F   T T
                                                               F F

                 3
                              5
                 2                 4
   0                                       0   1       2   3   4       5   6

                              6        0   -   1       1   1   0       0   0
                                       1   1   -       0   0   0       0   1

                 1                     2   1   0       -   0   0       0   1
                                       3   1   0       0   -   0       1   0
                                       4   0   0       0   0   -       0   1
                                       5   0   0       0   1   0       -   0
                                       6   0   1       1   0   1       0   -




                         29
Algoritmos de busca em grafos - Busca em largura

FILA: 0 2 1
      1
      256
      315                                  VISITADO
                                   0   1   2       3       4       5       6
                                   T T T T
                                   F F F F                 F   T T
                                                               F F

                 3
                              5
                 2                 4
   0                                       0   1       2   3   4       5   6

                              6        0   -   1       1   1   0       0   0
                                       1   1   -       0   0   0       0   1

                 1                     2   1   0       -   0   0       0   1
                                       3   1   0       0   -   0       1   0
                                       4   0   0       0   0   -       0   1
                                       5   0   0       0   1   0       -   0
                                       6   0   1       1   0   1       0   -




                         29
Algoritmos de busca em grafos - Busca em largura

FILA: 0 2 1
      1
      256
      315                                  VISITADO
                                   0   1   2       3       4       5       6
                                   T T T T
                                   F F F F                 F   T T
                                                               F F

                 3
                              5
                 2                 4
   0                                       0   1       2   3   4       5   6

                              6        0   -   1       1   1   0       0   0
                                       1   1   -       0   0   0       0   1

                 1                     2   1   0       -   0   0       0   1
                                       3   1   0       0   -   0       1   0
                                       4   0   0       0   0   -       0   1
                                       5   0   0       0   1   0       -   0
                                       6   0   1       1   0   1       0   -




                         29
Algoritmos de busca em grafos - Busca em largura

FILA: 0 2 1
      5
      16
      256
      315                                  VISITADO
                                   0   1   2       3       4       5       6
                                   T T T T
                                   F F F F                 F   T T
                                                               F F

                 3
                              5
                 2                 4
   0                                       0   1       2   3   4       5   6

                              6        0   -   1       1   1   0       0   0
                                       1   1   -       0   0   0       0   1

                 1                     2   1   0       -   0   0       0   1
                                       3   1   0       0   -   0       1   0
                                       4   0   0       0   0   -       0   1
                                       5   0   0       0   1   0       -   0
                                       6   0   1       1   0   1       0   -




                         29
Algoritmos de busca em grafos - Busca em largura

FILA: 0 2 1
      5
      16
      256
      315                                  VISITADO
                                   0   1   2       3       4       5       6
                                   T T T T
                                   F F F F                 F   T T
                                                               F F

                 3
                              5
                 2                 4
   0                                       0   1       2   3   4       5   6

                              6        0   -   1       1   1   0       0   0
                                       1   1   -       0   0   0       0   1

                 1                     2   1   0       -   0   0       0   1
                                       3   1   0       0   -   0       1   0
                                       4   0   0       0   0   -       0   1
                                       5   0   0       0   1   0       -   0
                                       6   0   1       1   0   1       0   -




                         29
Algoritmos de busca em grafos - Busca em largura

FILA: 0 2 1
      5
      16
      256
      315                                  VISITADO
                                   0   1   2       3       4       5       6
                                   T T T T
                                   F F F F                 F   T T
                                                               F F

                 3
                              5
                 2                 4
   0                                       0   1       2   3   4       5   6

                              6        0   -   1       1   1   0       0   0
                                       1   1   -       0   0   0       0   1

                 1                     2   1   0       -   0   0       0   1
                                       3   1   0       0   -   0       1   0
                                       4   0   0       0   0   -       0   1
                                       5   0   0       0   1   0       -   0
                                       6   0   1       1   0   1       0   -




                         29
Algoritmos de busca em grafos - Busca em largura

FILA: 0 2 1
      6
      5
      16
      256
      315                                  VISITADO
                                   0   1   2       3       4       5       6
                                   T T T T
                                   F F F F                 F   T T
                                                               F F

                 3
                              5
                 2                 4
   0                                       0   1       2   3   4       5   6

                              6        0   -   1       1   1   0       0   0
                                       1   1   -       0   0   0       0   1

                 1                     2   1   0       -   0   0       0   1
                                       3   1   0       0   -   0       1   0
                                       4   0   0       0   0   -       0   1
                                       5   0   0       0   1   0       -   0
                                       6   0   1       1   0   1       0   -




                         29
Algoritmos de busca em grafos - Busca em largura

FILA: 0 2 1
      6
      5
      16
      256
      315                                  VISITADO
                                   0   1   2       3       4       5       6
                                   T T T T
                                   F F F F                 F   T T
                                                               F F

                 3
                              5
                 2                 4
   0                                       0   1       2   3   4       5   6

                              6        0   -   1       1   1   0       0   0
                                       1   1   -       0   0   0       0   1

                 1                     2   1   0       -   0   0       0   1
                                       3   1   0       0   -   0       1   0
                                       4   0   0       0   0   -       0   1
                                       5   0   0       0   1   0       -   0
                                       6   0   1       1   0   1       0   -




                         29
Algoritmos de busca em grafos - Busca em largura

FILA: 0 2 1
      6
      5
      16
      256
      315                                  VISITADO
                                   0   1   2       3       4       5       6
                                   T T T T
                                   F F F F                 F   T T
                                                               F F

                 3
                              5
                 2                 4
   0                                       0   1       2   3   4       5   6

                              6        0   -   1       1   1   0       0   0
                                       1   1   -       0   0   0       0   1

                 1                     2   1   0       -   0   0       0   1
                                       3   1   0       0   -   0       1   0
                                       4   0   0       0   0   -       0   1
                                       5   0   0       0   1   0       -   0
                                       6   0   1       1   0   1       0   -




                         29
Algoritmos de busca em grafos - Busca em largura

FILA: 0 2 1
      6
      5
      16
      256
      315                                  VISITADO
                                   0   1   2       3       4       5       6
                                   T T T T
                                   F F F F                 F   T T
                                                               F F

                 3
                              5
                 2                 4
   0                                       0   1       2   3   4       5   6

                              6        0   -   1       1   1   0       0   0
                                       1   1   -       0   0   0       0   1

                 1                     2   1   0       -   0   0       0   1
                                       3   1   0       0   -   0       1   0
                                       4   0   0       0   0   -       0   1
                                       5   0   0       0   1   0       -   0
                                       6   0   1       1   0   1       0   -




                         29
Algoritmos de busca em grafos - Busca em largura

FILA: 0 2 1
      6
      5
      16
      256
      315                                  VISITADO
                                   0   1   2       3       4       5       6
                                   T T T T
                                   F F F F                 F   T T
                                                               F F

                 3
                              5
                 2                 4
   0                                       0   1       2   3   4       5   6

                              6        0   -   1       1   1   0       0   0
                                       1   1   -       0   0   0       0   1

                 1                     2   1   0       -   0   0       0   1
                                       3   1   0       0   -   0       1   0
                                       4   0   0       0   0   -       0   1
                                       5   0   0       0   1   0       -   0
                                       6   0   1       1   0   1       0   -




                         29
Algoritmos de busca em grafos - Busca em largura

FILA: 0 2 1
      4
      6
      5
      16
      256
      315                                  VISITADO
                                   0   1   2       3       4       5       6
                                   T T T T
                                   F F F F                 F   T T
                                                               F F

                 3
                              5
                 2                 4
   0                                       0   1       2   3   4       5   6

                              6        0   -   1       1   1   0       0   0
                                       1   1   -       0   0   0       0   1

                 1                     2   1   0       -   0   0       0   1
                                       3   1   0       0   -   0       1   0
                                       4   0   0       0   0   -       0   1
                                       5   0   0       0   1   0       -   0
                                       6   0   1       1   0   1       0   -




                         29
Algoritmos de busca em grafos - Busca em largura

FILA: 0 2 1
      4
      6
      5
      16
      256
      315                                  VISITADO
                                   0   1   2       3       4       5       6
                                   T T T T T T T
                                   F F F F F F F

                 3
                              5
                 2                 4
   0                                       0   1       2   3   4       5   6

                              6        0   -   1       1   1   0       0   0
                                       1   1   -       0   0   0       0   1

                 1                     2   1   0       -   0   0       0   1
                                       3   1   0       0   -   0       1   0
                                       4   0   0       0   0   -       0   1
                                       5   0   0       0   1   0       -   0
                                       6   0   1       1   0   1       0   -




                         29
Algoritmos de busca em grafos - Busca em largura

FILA: 0 2 1
      4
      6
      5
      16
      256
      315                                  VISITADO
                                   0   1   2       3       4       5       6
                                   T T T T T T T
                                   F F F F F F F

                 3
                              5
                 2                 4
   0                                       0   1       2   3   4       5   6

                              6        0   -   1       1   1   0       0   0
                                       1   1   -       0   0   0       0   1

                 1                     2   1   0       -   0   0       0   1
                                       3   1   0       0   -   0       1   0
                                       4   0   0       0   0   -       0   1
                                       5   0   0       0   1   0       -   0
                                       6   0   1       1   0   1       0   -




                         29
Algoritmos de busca em grafos - Busca em largura

FILA: 0 2 1
      4
      6
      5
      16
      256
      315                                  VISITADO
                                   0   1   2       3       4       5       6
                                   T T T T T T T
                                   F F F F F F F

                 3
                              5
                 2                 4
   0                                       0   1       2   3   4       5   6

                              6        0   -   1       1   1   0       0   0
                                       1   1   -       0   0   0       0   1

                 1                     2   1   0       -   0   0       0   1
                                       3   1   0       0   -   0       1   0
                                       4   0   0       0   0   -       0   1
                                       5   0   0       0   1   0       -   0
                                       6   0   1       1   0   1       0   -




                         29
Algoritmos de busca em grafos - Busca em largura

FILA: 0 2 1
      4
      6
      5
      16
      256
      315                                  VISITADO
                                   0   1   2       3       4       5       6
                                   T T T T T T T
                                   F F F F F F F

                 3
                              5
                 2                 4
   0                                       0   1       2   3   4       5   6

                              6        0   -   1       1   1   0       0   0
                                       1   1   -       0   0   0       0   1

                 1                     2   1   0       -   0   0       0   1
                                       3   1   0       0   -   0       1   0
                                       4   0   0       0   0   -       0   1
                                       5   0   0       0   1   0       -   0
                                       6   0   1       1   0   1       0   -




                         29
Algoritmos de busca em grafos - Busca em largura

FILA: 0 2 1
      4
      6
      5
      16
      256
      315                                  VISITADO
                                   0   1   2       3       4       5       6
                                   T T T T T T T
                                   F F F F F F F

                 3
                              5
                 2                 4
   0                                       0   1       2   3   4       5   6

                              6        0   -   1       1   1   0       0   0
                                       1   1   -       0   0   0       0   1

                 1                     2   1   0       -   0   0       0   1
                                       3   1   0       0   -   0       1   0
                                       4   0   0       0   0   -       0   1
                                       5   0   0       0   1   0       -   0
                                       6   0   1       1   0   1       0   -




                         29
Algoritmos de busca em grafos - Busca em
                profundidade

• Explora primeiro o último vértice
  colocado na lista (funciona como uma
  pilha):




                     30
Algoritmos de busca em grafos - Busca em
                profundidade

• Explora primeiro o último vértice
  colocado na lista (funciona como uma
  pilha):




                     30
Algoritmos de busca em grafos - Busca em
                profundidade

• Explora primeiro o último vértice
  colocado na lista (funciona como uma
  pilha):




                     30
Algoritmos de busca em grafos - Busca em
                profundidade

• Explora primeiro o último vértice
  colocado na lista (funciona como uma
  pilha):




                     30
Algoritmos de busca em grafos - Busca em
                profundidade

• Explora primeiro o último vértice
  colocado na lista (funciona como uma
  pilha):




                     30
Algoritmos de busca em grafos - Busca em
                profundidade

• Explora primeiro o último vértice
  colocado na lista (funciona como uma
  pilha):




                     30
Algoritmos de busca em grafos - Busca em
                profundidade

• Explora primeiro o último vértice
  colocado na lista (funciona como uma
  pilha):




                     30
Algoritmos de busca em grafos - Busca em
                profundidade

• Explora primeiro o último vértice
  colocado na lista (funciona como uma
  pilha):




                     30
Algoritmos de busca em grafos - Busca em
                profundidade

• Explora primeiro o último vértice
  colocado na lista (funciona como uma
  pilha):




                     30
Algoritmos de busca em grafos - Busca em
                profundidade

• Explora primeiro o último vértice
  colocado na lista (funciona como uma
  pilha):




                     30
Algoritmos de busca em grafos - Busca em
                profundidade

• Explora primeiro o último vértice
  colocado na lista (funciona como uma
  pilha):




                     30
Algoritmos de busca em grafos - Busca em
                profundidade

• Explora primeiro o último vértice
  colocado na lista (funciona como uma
  pilha):




                     30
Algoritmos de busca em grafos - Busca em
                profundidade

• Explora primeiro o último vértice
  colocado na lista (funciona como uma
  pilha):




                     30
Algoritmos de busca em grafos - Busca em
                profundidade

• Explora primeiro o último vértice
  colocado na lista (funciona como uma
  pilha):




                     30
Algoritmos de busca em grafos - Busca em
                profundidade

• Explora primeiro o último vértice
  colocado na lista (funciona como uma
  pilha):




                     30
Algoritmos de busca em grafos - Busca em
                profundidade

• Explora primeiro o último vértice
  colocado na lista (funciona como uma
  pilha):




                     30
Algoritmos de busca em grafos - Busca em
                profundidade

• Explora primeiro o último vértice
  colocado na lista (funciona como uma
  pilha):




                     30
Algoritmos de busca em grafos - Busca em
                profundidade

• Explora primeiro o último vértice
  colocado na lista (funciona como uma
  pilha):




                     30
Algoritmos de busca em grafos - Busca em
                profundidade

• Explora primeiro o último vértice
  colocado na lista (funciona como uma
  pilha):




                     30
Algoritmos de busca em grafos - Busca em
                profundidade

• Explora primeiro o último vértice
  colocado na lista (funciona como uma
  pilha):




                     30
Algoritmos de busca em grafos - Busca em
                profundidade

• Explora primeiro o último vértice
  colocado na lista (funciona como uma
  pilha):




                     30
Algoritmos de busca em grafos - Busca em
                profundidade

• Explora primeiro o último vértice
  colocado na lista (funciona como uma
  pilha):




                     30
Algoritmos de busca em grafos - Busca em
                profundidade

• Explora primeiro o último vértice
  colocado na lista (funciona como uma
  pilha):




                     30
Algoritmos de busca em grafos - Busca em
                profundidade

• Explora primeiro o último vértice
  colocado na lista (funciona como uma
  pilha):




                     30
Algoritmos de busca em grafos - Busca em
                profundidade

• Explora primeiro o último vértice
  colocado na lista (funciona como uma
  pilha):




                     30
Algoritmos de busca em grafos - Busca em
                profundidade

• Explora primeiro o último vértice
  colocado na lista (funciona como uma
  pilha):




                     30
Algoritmos de busca em grafos - Busca em
                profundidade

• Explora primeiro o último vértice
  colocado na lista (funciona como uma
  pilha):




                     30
Algoritmos de busca em grafos - Busca em
                profundidade

• Explora primeiro o último vértice
  colocado na lista (funciona como uma
  pilha):




                     30
Algoritmos de busca em grafos - Busca em
                profundidade

• Explora primeiro o último vértice
  colocado na lista (funciona como uma
  pilha):




                     30
Algoritmos de busca em grafos - Busca em
                profundidade

• Explora primeiro o último vértice
  colocado na lista (funciona como uma
  pilha):




                     30
Algoritmos de busca em grafos - Busca em
                profundidade

• Explora primeiro o último vértice
  colocado na lista (funciona como uma
  pilha):




                     30
Algoritmos de busca em grafos - Busca em
                profundidade

• Explora primeiro o último vértice
  colocado na lista (funciona como uma
  pilha):




                     30
Implementação: Busca em profundidade



// Declarando
const int MAX_VERTICES = 100;
int grafo[MAX_VERTICES][MAX_VERTICES];
bool visitado[MAX_VERTICES];
int num_vertices; // qtd de vértices do grafo atual

// Recursivamente visita todos os vértices
// alcançáveis a partir de atual
void dfs(int atual) {
    for (int i = 0; i < num_vertices; ++i) {
        if (grafo[atual][i] && !visitado[i]) {
            visitado[i] = true;
            dfs(i);
        }
    }
}




                          31
Grafos: Aplicações
Aplicações
• Verificar se um grafo é bicolorível
• Detecção de Ciclos
• Ordenação Topológica
• Caminhos Mínimos (Grafos não
  ponderados)
• Conectividade
Aplicações:
          Bicoloração
• Em algumas espécies é difícil distinguir os
  machos das fêmeas, como é o caso de uma
  espécie recém descoberta, os
  happyRockers.
• Num laboratório são realizadas
  experiências para determinar potenciais
  machos e fêmeas em uma amostra.
Aplicações:
            Bicoloração
•   São feitas anotações sempre que dois indivíduos
    se “relacionam”.

•   A espécie não é monogâmica, portanto um
    indivíduo A pode tranquilamente ter relações
    com os indivíduo B e C.

•   Porém, os sexos são bem definidos, machos
    apenas se relacionam com fêmeas e vice-versa.
    Então, se A se relaciona com B e C, estes são do
    mesmo sexo, o qual é diferente do sexo de A.
Aplicações:
            Bicoloração
•   Dadas as anotações sobre as interações entre
    os indivíduos, o Dr. que coordena o laboratório
    quer saber se é possível distinguir quais
    indivíduos tem o mesmo sexo ou se existem
    indivíduos suspeitos no grupo.

• Como resolver ?
Aplicações:
             Bicoloração
• O problema pode ser modelado em um
  grafo não direcionado.
• Indivíduos são os vértices, relações são as
  arestas.
• Tá, e agora ?
Aplicações:
              Bicoloração
•   Queremos saber se é possível separar os
    vértices em dois conjuntos, onde os vértices
    pertencentes a cada conjunto não se
    relacionaram durante o experimento.

•   Ah, que legal, e como faço isso ?!?

    •   Basta verificar se é possível colorir os
        vértices do grafo usando apenas duas cores,
        ou seja, verificar se o grafo é bicolorível/
        bipartido.
Aplicações:
            Bicoloração
•   E como fazer essa verificação ?

•   Fácil ! Basta fazer uma busca em largura..

•   Começamos um BFS de cada vértice ainda não
    colorido, pintando ele de branco e adicionando
    na fila;

•   Quando tira-se um vértice da fila e vai
    processar seus vizinhos, tenta pintar eles da cor
    contrária a que o vértice atual está pintado.
Aplicações:
                Bicoloração
#include <iostream>
#include <list>

using namespace std;

int main(){

    int u, v, num_individuos, num_relacoes;
    list< int >::iterator w;

    cin >> num_individuos >> num_relacoes;
    list< int > grafo[num_individuos+1];
    int cor[num_individuos+1];

    for( u = 1; u <= num_individuos; u++ )
         cor[u] = -1;
Aplicações:
             Bicoloração
while( num_relacoes-- ){
  cin >> u >> v;
  grafo[u].push_back( v );
  grafo[v].push_back( u );
}

bool bipartido = true;
for( int i = 1; i <= num_individuos && bipartido; i++ ){
  if( cor[i] != -1 ) continue;
  cor[i] = 1;
  list< int > fila;
  fila.push_back( i );
Aplicações:
              Bicoloração
 while( !fila.empty() && bipartido ){
  u = fila.front(); fila.pop_front();
  for( w = grafo[u].begin(); w != grafo[u].end(); w++ ){
      if( cor[*w] == -1 ){
         cor[*w] = 1-cor[u]; // pinta o vizinho da cor contraria
         fila.push_back( *w ); // e adiciona na fila
      } else if( cor[*w] != 1-cor[*w] ) {
         // O vizinho estava pintado da mesma cor, grafo nao e
         // bicolorivel.
         bipartido = false;
         break;
     }
  }
}
Aplicações:
                    Bicoloração
    }

    if( bipartido ) cout << “Possivel distinguir os sexosn”;
    else cout << “Existem individuos suspeitos no grupon”;

    return 0;
}
Aplicações:
  Detecção de Ciclos

• Sabemos que existem grafos cíclicos e
  acíclicos.
• Mas dado um grafo, como seria uma
  algoritmo que verifica se ele é cíclico ou
  acíclico ?
Aplicações:
    Detecção de Ciclos
•   Durante um DFS, podemos classificar as
    arestas do grafo em 3 tipos, são eles:

    •   arestas descendentes - ligam
        ancestrais a descendentes

    •   arestas de retorno - ligam
        descendentes a ancestrais

    •   arestas cruzadas - ligam vértices sem
        relação ancestral/descendente
Aplicações:
Detecção de Ciclos
•   Um grafo tem um ciclo, se e somente se ele
    possui uma aresta de retorno.
•   Portanto, se durante uma busca em
    profundidade detectarmos tal tipo de
    aresta, podemos garantir que o grafo é
    cíclico.
Aplicações:
Detecção de Ciclos
•   A idéia apesar de muito parecida funciona
    de maneiras diferentes para grafos
    orientados e não orientados.
•   No grafo não orientado, inicialmente todos
    estão pintados de branco, e a medida que
    são descobertos são pintados de preto.
Aplicações:
Detecção de Ciclos

•   Quando um vértice tem uma aresta para
    um vértice pintado de preto ( que já foi
    descoberto ), e esse não é seu pai, essa é
    uma aresta de retorno.
•   Logo, o grafo tem um ciclo.
Aplicações:
Detecção de Ciclos
•   Nos grafos orientados, o fato de um
    vizinho já ter sido descoberto não significa
    que a aresta é de retorno;
•   Isso só é verdade se o vértice ainda estiver
    sendo processado..
•   Portanto, precisamos diferenciar entre ‘não-
    usado’, ‘descoberto’ e ‘processado’
Aplicações:
Detecção de Ciclos
•   Num grafo direcionado uma aresta de
    retorno é uma aresta que aponta para um
    vértice ‘descoberto’.


•   Então.. vamos ao código !
Aplicações:
       Detecção de Ciclos
bool ciclico(){

    for( int u = 1; u <= num_vert; u++ )
      cor[u] = -1;
    for( int u = 1; u <= num_vert; u++ )
      if( cor[u] == -1 ){
          parent[u] = u; // necessario para grafos nao orientados
          if( dfsC( u ) ) return true;
      }
    return false;
}
Aplicações:
        Detecção de Ciclos
bool dfsC( int u ){
 // versao para grafos nao orientados
 cor[u] = 1;
    for( list<int>::iterator v = grafo[u].beging(); v != grafo[u].end(); v++ ){
       if( cor[*v] == -1 ){
           parent[*v] = u;
           if( dfsC( *v ) ) return true;
       }
       else if( *v != parent[u] ) return true;
    }
    return false;
}
Aplicações:
        Detecção de Ciclos
bool dfsC( int u ){
 // versao para grafos orientados
 cor[u] = 1; // vertice u foi descoberto
    for( list<int>::iterator v = grafo[u].beging(); v != grafo[u].end(); v++ ){
       if( cor[*v] == -1 ){
           if( dfsC( *v ) ) return true;
       }
       else if( cor[*v] == 1 ) return true;
    }
    cor[u] = 2; // vertice u foi processado
    return false;
}
Aplicações:
Ordenação Topológica
• No curso de Ciência da Computação
  algumas disciplinas possuem pré-requisitos.
• Dadas as disciplinas que o aluno deve
  cursar e seus pré-requisitos como
  descobrir em qual ordem as matérias
  podem ser cursadas ?
Aplicações:
Ordenação Topológica

• As disciplinas podem ser vistas como os
  vértices de um grafo;
• Existe uma aresta direcionada do vértice X
  para o vértice Y se a disciplina X é pré-
  requisito da disciplina Y.
Aplicações:
Ordenação Topológica
• Uma ordenação topológica ordena os
  vértices em uma linha de modo que as
  arestas são todas direcionadas da esquerda
  pra direita.
• Logicamente, se o grafo é cíclico é
  impossível que tal ordenação exista.
Aplicações:
Ordenação Topológica
• Mas como fazer uma ordenação
  topológica ?
   • Simples! Basta uma busca em
      profundidade para gerar uma
      ordenação topológica, ou retornar um
      erro caso o grafo seja cíclico.
• Como assim ?
Aplicações:
Ordenação Topológica
•   Na busca em profundidade depois que
    analisamos todas as arestas que saem de um
    vértice, podemos garantir que ele não tem
    nenhuma aresta de entrada vindo de um vértice
    que já foi processado.

•   E se em algum momento detectamos a
    existência de um ciclo ?

     •   Uma ordenação topológica não existe.
Aplicações:
      Ordenação Topológica
bool gera_ordenacao(){
 ordem.clear(); // pilha onde a ordenacao sera armazenada
    for( int u = 1; u <= num_vert; u++ )
        cor[u] = -1;
    for( int u = 1; u <= num_vert; u++ )
        if( cor[u] == -1 ){
            if( dfsT( u ) ) return false;
      }
    while( !ordem.empty() ){
      int u = ordem.top(); ordem.pop();
      cout << u << “ “;
    }
    return true;
}
Aplicações:
    Ordenação Topológica
bool dfsT( int u ){

    cor[u] = 1; // vertice u foi descoberto
    for( list<int>::iterator v = grafo[u].beging(); v != grafo[u].end(); v++ ){
       if( cor[*v] == -1 ){
           if( dfsC( *v ) ) return true;
       }
       else if( cor[*v] == 1 ) return true;
    }
    cor[u] = 2; // vertice u foi processado
    pilha.push( u );
    return false;
}
Aplicações:
  Caminhos Mínimos

• Num grafo não ponderado, quando
  queremos encontrar o menor caminho do
  vértice s ao vértice t, precisamos apenas
  de uma busca em largura.
Aplicações:
   Caminhos Mínimos
• Por que ?
 • Se as arestas não tem pesos diferentes, o
    custo do menor caminho de s para t é
    na verdade, a menor profundidade,
    partindo de s com que conseguimos
    visitar t.
Aplicações:
 Caminhos Mínimos
• Dado o funcionamento da busca em
  largura, isso é exatamente o que ela
  calcula.
• Primeiro todos os vértices a
  profundidade 1 são visitados, em seguida
  todos que estão a profundidade 2 e assim
  por diante.
Aplicações:
          Caminhos Mínimos
int menorCaminho( int s, int t ){

    int dist[num_vert];
    memset( dist, -1, sizeof( dist ) );
    dist[s] = 0;

    ...

    return dist[t];
}
continua..
Referências e bibliografia



•   [TADM] - Steven S. Skiena -The Algorithm Design Manual

•   Thomas H. Cormen, Charles E. Leiserson - Introduction to Algorithms, Second
    Edition




                                     66

Más contenido relacionado

La actualidad más candente

Pesquisa e Ordenação Aula 01 - Apresentação
Pesquisa e Ordenação Aula 01 - ApresentaçãoPesquisa e Ordenação Aula 01 - Apresentação
Pesquisa e Ordenação Aula 01 - ApresentaçãoLeinylson Fontinele
 
Lista de Exercícios - Linguagem Formais e Autômatos
Lista de Exercícios - Linguagem Formais e AutômatosLista de Exercícios - Linguagem Formais e Autômatos
Lista de Exercícios - Linguagem Formais e AutômatosTárcio Sales
 
Hierarquia de memória
Hierarquia de memóriaHierarquia de memória
Hierarquia de memóriaPAULO Moreira
 
Caminho Mínimo em Grafos - Algoritmo de Bellman-Ford
Caminho Mínimo em Grafos - Algoritmo de Bellman-FordCaminho Mínimo em Grafos - Algoritmo de Bellman-Ford
Caminho Mínimo em Grafos - Algoritmo de Bellman-FordGabriel Albuquerque
 
Teoria dos Grafos - História e COnceitos Iniciais
Teoria dos Grafos - História e COnceitos IniciaisTeoria dos Grafos - História e COnceitos Iniciais
Teoria dos Grafos - História e COnceitos IniciaisVictor Hazin da Rocha
 
57701066 matematica-discreta-exercicios-resolvidos
57701066 matematica-discreta-exercicios-resolvidos57701066 matematica-discreta-exercicios-resolvidos
57701066 matematica-discreta-exercicios-resolvidosHAROLDO MIRANDA DA COSTA JR
 
Sequencias e Regularidades
Sequencias e RegularidadesSequencias e Regularidades
Sequencias e Regularidadesestudamatematica
 
Estrutura de Dados Aula 13 - Árvores (conceito, elementos, tipos e utilizações)
Estrutura de Dados Aula 13 - Árvores (conceito, elementos, tipos e utilizações)Estrutura de Dados Aula 13 - Árvores (conceito, elementos, tipos e utilizações)
Estrutura de Dados Aula 13 - Árvores (conceito, elementos, tipos e utilizações)Leinylson Fontinele
 
Redes de computadores 2 - Protocolos
Redes de computadores 2 - ProtocolosRedes de computadores 2 - Protocolos
Redes de computadores 2 - ProtocolosJosé Ronaldo Trajano
 

La actualidad más candente (20)

Pesquisa e Ordenação Aula 01 - Apresentação
Pesquisa e Ordenação Aula 01 - ApresentaçãoPesquisa e Ordenação Aula 01 - Apresentação
Pesquisa e Ordenação Aula 01 - Apresentação
 
Lista de Exercícios - Linguagem Formais e Autômatos
Lista de Exercícios - Linguagem Formais e AutômatosLista de Exercícios - Linguagem Formais e Autômatos
Lista de Exercícios - Linguagem Formais e Autômatos
 
Regressão Linear Simples
Regressão Linear SimplesRegressão Linear Simples
Regressão Linear Simples
 
Hierarquia de memória
Hierarquia de memóriaHierarquia de memória
Hierarquia de memória
 
Pilha e Fila Estática
Pilha e Fila EstáticaPilha e Fila Estática
Pilha e Fila Estática
 
Caminho Mínimo em Grafos - Algoritmo de Bellman-Ford
Caminho Mínimo em Grafos - Algoritmo de Bellman-FordCaminho Mínimo em Grafos - Algoritmo de Bellman-Ford
Caminho Mínimo em Grafos - Algoritmo de Bellman-Ford
 
Teoria dos Grafos - História e COnceitos Iniciais
Teoria dos Grafos - História e COnceitos IniciaisTeoria dos Grafos - História e COnceitos Iniciais
Teoria dos Grafos - História e COnceitos Iniciais
 
Algoritmos - Pseudocódigo
Algoritmos - PseudocódigoAlgoritmos - Pseudocódigo
Algoritmos - Pseudocódigo
 
Teoria dos Grafos
Teoria dos GrafosTeoria dos Grafos
Teoria dos Grafos
 
Árvores de Decisão
Árvores de Decisão Árvores de Decisão
Árvores de Decisão
 
57701066 matematica-discreta-exercicios-resolvidos
57701066 matematica-discreta-exercicios-resolvidos57701066 matematica-discreta-exercicios-resolvidos
57701066 matematica-discreta-exercicios-resolvidos
 
Sequencias e Regularidades
Sequencias e RegularidadesSequencias e Regularidades
Sequencias e Regularidades
 
Árvores Rubro Negra
Árvores Rubro NegraÁrvores Rubro Negra
Árvores Rubro Negra
 
Estrutura de Dados Aula 13 - Árvores (conceito, elementos, tipos e utilizações)
Estrutura de Dados Aula 13 - Árvores (conceito, elementos, tipos e utilizações)Estrutura de Dados Aula 13 - Árvores (conceito, elementos, tipos e utilizações)
Estrutura de Dados Aula 13 - Árvores (conceito, elementos, tipos e utilizações)
 
Redes de computadores 2 - Protocolos
Redes de computadores 2 - ProtocolosRedes de computadores 2 - Protocolos
Redes de computadores 2 - Protocolos
 
Lista de Eventos
Lista de EventosLista de Eventos
Lista de Eventos
 
Algoritmos e Programação
Algoritmos e ProgramaçãoAlgoritmos e Programação
Algoritmos e Programação
 
Aula Grafos
Aula GrafosAula Grafos
Aula Grafos
 
Aula 12 medidas de dispersão
Aula 12   medidas de dispersãoAula 12   medidas de dispersão
Aula 12 medidas de dispersão
 
Minicurso Linux
Minicurso Linux Minicurso Linux
Minicurso Linux
 

Destacado

Processamento de Imagens Digitais - Transformações de Intensidade, Filtragem ...
Processamento de Imagens Digitais - Transformações de Intensidade, Filtragem ...Processamento de Imagens Digitais - Transformações de Intensidade, Filtragem ...
Processamento de Imagens Digitais - Transformações de Intensidade, Filtragem ...Murilo Adriano Vasconcelos
 
Treinamento para Competições de Programacão - Single-Source Shortest Paths: D...
Treinamento para Competições de Programacão - Single-Source Shortest Paths: D...Treinamento para Competições de Programacão - Single-Source Shortest Paths: D...
Treinamento para Competições de Programacão - Single-Source Shortest Paths: D...Murilo Adriano Vasconcelos
 
Tópicos Avançados em Computabilidade - Teorema da Recursão e Decibilidade de ...
Tópicos Avançados em Computabilidade - Teorema da Recursão e Decibilidade de ...Tópicos Avançados em Computabilidade - Teorema da Recursão e Decibilidade de ...
Tópicos Avançados em Computabilidade - Teorema da Recursão e Decibilidade de ...Murilo Adriano Vasconcelos
 
Treinamento Para Competições de Programação - All Pairs Shortest Paths - O Al...
Treinamento Para Competições de Programação - All Pairs Shortest Paths - O Al...Treinamento Para Competições de Programação - All Pairs Shortest Paths - O Al...
Treinamento Para Competições de Programação - All Pairs Shortest Paths - O Al...Murilo Adriano Vasconcelos
 
Introdução ao Processamento de Imagens Digitais
Introdução ao Processamento de Imagens DigitaisIntrodução ao Processamento de Imagens Digitais
Introdução ao Processamento de Imagens DigitaisMurilo Adriano Vasconcelos
 
Introdução ao Processamento de Imagem Digital - Relacionamentos básicos entre...
Introdução ao Processamento de Imagem Digital - Relacionamentos básicos entre...Introdução ao Processamento de Imagem Digital - Relacionamentos básicos entre...
Introdução ao Processamento de Imagem Digital - Relacionamentos básicos entre...Murilo Adriano Vasconcelos
 
Introdução à Teoria dos Grafos e Análise de Redes Sociais
Introdução à Teoria dos Grafos e Análise de Redes SociaisIntrodução à Teoria dos Grafos e Análise de Redes Sociais
Introdução à Teoria dos Grafos e Análise de Redes Sociaisfabiomalini
 

Destacado (12)

Processamento de Imagens Digitais - Transformações de Intensidade, Filtragem ...
Processamento de Imagens Digitais - Transformações de Intensidade, Filtragem ...Processamento de Imagens Digitais - Transformações de Intensidade, Filtragem ...
Processamento de Imagens Digitais - Transformações de Intensidade, Filtragem ...
 
Tópicos Avan
Tópicos AvanTópicos Avan
Tópicos Avan
 
Treinamento para Competições de Programacão - Single-Source Shortest Paths: D...
Treinamento para Competições de Programacão - Single-Source Shortest Paths: D...Treinamento para Competições de Programacão - Single-Source Shortest Paths: D...
Treinamento para Competições de Programacão - Single-Source Shortest Paths: D...
 
Tópicos Avançados em Computabilidade - Teorema da Recursão e Decibilidade de ...
Tópicos Avançados em Computabilidade - Teorema da Recursão e Decibilidade de ...Tópicos Avançados em Computabilidade - Teorema da Recursão e Decibilidade de ...
Tópicos Avançados em Computabilidade - Teorema da Recursão e Decibilidade de ...
 
Treinamento Para Competições de Programação - All Pairs Shortest Paths - O Al...
Treinamento Para Competições de Programação - All Pairs Shortest Paths - O Al...Treinamento Para Competições de Programação - All Pairs Shortest Paths - O Al...
Treinamento Para Competições de Programação - All Pairs Shortest Paths - O Al...
 
Design Patterns - Adapter e Decorator
Design Patterns - Adapter e DecoratorDesign Patterns - Adapter e Decorator
Design Patterns - Adapter e Decorator
 
Introdução ao Processamento de Imagens Digitais
Introdução ao Processamento de Imagens DigitaisIntrodução ao Processamento de Imagens Digitais
Introdução ao Processamento de Imagens Digitais
 
Introdução ao Processamento de Imagem Digital - Relacionamentos básicos entre...
Introdução ao Processamento de Imagem Digital - Relacionamentos básicos entre...Introdução ao Processamento de Imagem Digital - Relacionamentos básicos entre...
Introdução ao Processamento de Imagem Digital - Relacionamentos básicos entre...
 
SERIE BENCÉNICA I
SERIE BENCÉNICA ISERIE BENCÉNICA I
SERIE BENCÉNICA I
 
Arenos y aromaticidad
Arenos y aromaticidadArenos y aromaticidad
Arenos y aromaticidad
 
Introdução à Teoria dos Grafos e Análise de Redes Sociais
Introdução à Teoria dos Grafos e Análise de Redes SociaisIntrodução à Teoria dos Grafos e Análise de Redes Sociais
Introdução à Teoria dos Grafos e Análise de Redes Sociais
 
Quimica organica
Quimica organicaQuimica organica
Quimica organica
 

Similar a Competições de programação grafos BFS DFS

Seminário sobre Grafos por Samyra Lara
Seminário sobre Grafos por Samyra LaraSeminário sobre Grafos por Samyra Lara
Seminário sobre Grafos por Samyra LaraIFPB
 
Introdução aos grafos: Principais conceitos
Introdução aos grafos: Principais conceitosIntrodução aos grafos: Principais conceitos
Introdução aos grafos: Principais conceitosssusera0fc94
 
Pesquisa operacional teoria dos grafos
Pesquisa operacional teoria dos grafosPesquisa operacional teoria dos grafos
Pesquisa operacional teoria dos grafosDiego Henrique
 
Análise de Algoritmos - Conceitos de Grafos
Análise de Algoritmos - Conceitos de GrafosAnálise de Algoritmos - Conceitos de Grafos
Análise de Algoritmos - Conceitos de GrafosDelacyr Ferreira
 
Árvores Espalhadas Mínimas
Árvores Espalhadas MínimasÁrvores Espalhadas Mínimas
Árvores Espalhadas MínimasDiego Cavalca
 
ARS - Análise de Redes Sociais - VIII ERI MG
ARS - Análise de Redes Sociais - VIII ERI MGARS - Análise de Redes Sociais - VIII ERI MG
ARS - Análise de Redes Sociais - VIII ERI MGPetronio Candido
 
Teoria de Grafos.ppt.pptx para estudar MACS
Teoria de Grafos.ppt.pptx para estudar MACSTeoria de Grafos.ppt.pptx para estudar MACS
Teoria de Grafos.ppt.pptx para estudar MACSsandra soares
 
Topological Sorting (Portuguese)
Topological Sorting (Portuguese)Topological Sorting (Portuguese)
Topological Sorting (Portuguese)Hudson Miranda
 
Algoritmo de Kosaraju
Algoritmo de KosarajuAlgoritmo de Kosaraju
Algoritmo de KosarajuMarcos Castro
 
Elementary Circuits Enumeration in Graphs
Elementary Circuits Enumeration in GraphsElementary Circuits Enumeration in Graphs
Elementary Circuits Enumeration in GraphsLuiz Kill
 
Apresentação geometria analítica
Apresentação geometria analíticaApresentação geometria analítica
Apresentação geometria analíticaprofluizgustavo
 
Resumo do 7º,8º e 9º anos para t.i
Resumo do 7º,8º e 9º anos para t.iResumo do 7º,8º e 9º anos para t.i
Resumo do 7º,8º e 9º anos para t.iShivani Himatlal
 
MACS - grafos, trajetos e circuitos eulerianos; circuitos eulerianos...
MACS - grafos, trajetos e circuitos eulerianos; circuitos eulerianos...MACS - grafos, trajetos e circuitos eulerianos; circuitos eulerianos...
MACS - grafos, trajetos e circuitos eulerianos; circuitos eulerianos...Joana Pinto
 
Resolução - P2 - Modelo A - Geometria Analítica
Resolução - P2 - Modelo A - Geometria AnalíticaResolução - P2 - Modelo A - Geometria Analítica
Resolução - P2 - Modelo A - Geometria AnalíticaRodrigo Thiago Passos Silva
 

Similar a Competições de programação grafos BFS DFS (20)

Seminário sobre Grafos por Samyra Lara
Seminário sobre Grafos por Samyra LaraSeminário sobre Grafos por Samyra Lara
Seminário sobre Grafos por Samyra Lara
 
Introdução aos grafos: Principais conceitos
Introdução aos grafos: Principais conceitosIntrodução aos grafos: Principais conceitos
Introdução aos grafos: Principais conceitos
 
Grafos_1.pptx
Grafos_1.pptxGrafos_1.pptx
Grafos_1.pptx
 
Apresentação ia
Apresentação iaApresentação ia
Apresentação ia
 
Grafos
GrafosGrafos
Grafos
 
Pesquisa operacional teoria dos grafos
Pesquisa operacional teoria dos grafosPesquisa operacional teoria dos grafos
Pesquisa operacional teoria dos grafos
 
Análise de Algoritmos - Conceitos de Grafos
Análise de Algoritmos - Conceitos de GrafosAnálise de Algoritmos - Conceitos de Grafos
Análise de Algoritmos - Conceitos de Grafos
 
Grafosv2
Grafosv2Grafosv2
Grafosv2
 
slidesWtisc(1).pptx
slidesWtisc(1).pptxslidesWtisc(1).pptx
slidesWtisc(1).pptx
 
Árvores Espalhadas Mínimas
Árvores Espalhadas MínimasÁrvores Espalhadas Mínimas
Árvores Espalhadas Mínimas
 
ARS - Análise de Redes Sociais - VIII ERI MG
ARS - Análise de Redes Sociais - VIII ERI MGARS - Análise de Redes Sociais - VIII ERI MG
ARS - Análise de Redes Sociais - VIII ERI MG
 
Teoria de Grafos.ppt.pptx para estudar MACS
Teoria de Grafos.ppt.pptx para estudar MACSTeoria de Grafos.ppt.pptx para estudar MACS
Teoria de Grafos.ppt.pptx para estudar MACS
 
Topological Sorting (Portuguese)
Topological Sorting (Portuguese)Topological Sorting (Portuguese)
Topological Sorting (Portuguese)
 
Algoritmo de Kosaraju
Algoritmo de KosarajuAlgoritmo de Kosaraju
Algoritmo de Kosaraju
 
Elementary Circuits Enumeration in Graphs
Elementary Circuits Enumeration in GraphsElementary Circuits Enumeration in Graphs
Elementary Circuits Enumeration in Graphs
 
Apresentação geometria analítica
Apresentação geometria analíticaApresentação geometria analítica
Apresentação geometria analítica
 
Resumo do 7º,8º e 9º anos para t.i
Resumo do 7º,8º e 9º anos para t.iResumo do 7º,8º e 9º anos para t.i
Resumo do 7º,8º e 9º anos para t.i
 
MACS - grafos, trajetos e circuitos eulerianos; circuitos eulerianos...
MACS - grafos, trajetos e circuitos eulerianos; circuitos eulerianos...MACS - grafos, trajetos e circuitos eulerianos; circuitos eulerianos...
MACS - grafos, trajetos e circuitos eulerianos; circuitos eulerianos...
 
Aula 06
Aula 06Aula 06
Aula 06
 
Resolução - P2 - Modelo A - Geometria Analítica
Resolução - P2 - Modelo A - Geometria AnalíticaResolução - P2 - Modelo A - Geometria Analítica
Resolução - P2 - Modelo A - Geometria Analítica
 

Último

Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdfCurrículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdfTutor de matemática Ícaro
 
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEMPRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEMHELENO FAVACHO
 
Análise poema país de abril (Mauel alegre)
Análise poema país de abril (Mauel alegre)Análise poema país de abril (Mauel alegre)
Análise poema país de abril (Mauel alegre)ElliotFerreira
 
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdfProjeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdfHELENO FAVACHO
 
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptxSlides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptxLuizHenriquedeAlmeid6
 
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdfENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdfLeloIurk1
 
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdfProjeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdfHELENO FAVACHO
 
INTERVENÇÃO PARÁ - Formação de Professor
INTERVENÇÃO PARÁ - Formação de ProfessorINTERVENÇÃO PARÁ - Formação de Professor
INTERVENÇÃO PARÁ - Formação de ProfessorEdvanirCosta
 
CRUZADINHA - Leitura e escrita dos números
CRUZADINHA   -   Leitura e escrita dos números CRUZADINHA   -   Leitura e escrita dos números
CRUZADINHA - Leitura e escrita dos números Mary Alvarenga
 
COMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcante
COMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcanteCOMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcante
COMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcanteVanessaCavalcante37
 
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdfLeloIurk1
 
o ciclo do contato Jorge Ponciano Ribeiro.pdf
o ciclo do contato Jorge Ponciano Ribeiro.pdfo ciclo do contato Jorge Ponciano Ribeiro.pdf
o ciclo do contato Jorge Ponciano Ribeiro.pdfCamillaBrito19
 
Atividade - Letra da música Esperando na Janela.
Atividade -  Letra da música Esperando na Janela.Atividade -  Letra da música Esperando na Janela.
Atividade - Letra da música Esperando na Janela.Mary Alvarenga
 
matematica aula didatica prática e tecni
matematica aula didatica prática e tecnimatematica aula didatica prática e tecni
matematica aula didatica prática e tecniCleidianeCarvalhoPer
 
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptxSlides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptxLuizHenriquedeAlmeid6
 
Revolução russa e mexicana. Slides explicativos e atividades
Revolução russa e mexicana. Slides explicativos e atividadesRevolução russa e mexicana. Slides explicativos e atividades
Revolução russa e mexicana. Slides explicativos e atividadesFabianeMartins35
 
PROJETO DE EXTENSÃO I - Radiologia Tecnologia
PROJETO DE EXTENSÃO I - Radiologia TecnologiaPROJETO DE EXTENSÃO I - Radiologia Tecnologia
PROJETO DE EXTENSÃO I - Radiologia TecnologiaHELENO FAVACHO
 
planejamento_estrategico_-_gestao_2021-2024_16015654.pdf
planejamento_estrategico_-_gestao_2021-2024_16015654.pdfplanejamento_estrategico_-_gestao_2021-2024_16015654.pdf
planejamento_estrategico_-_gestao_2021-2024_16015654.pdfmaurocesarpaesalmeid
 
Bloco de português com artigo de opinião 8º A, B 3.docx
Bloco de português com artigo de opinião 8º A, B 3.docxBloco de português com artigo de opinião 8º A, B 3.docx
Bloco de português com artigo de opinião 8º A, B 3.docxkellyneamaral
 
Construção (C)erta - Nós Propomos! Sertã
Construção (C)erta - Nós Propomos! SertãConstrução (C)erta - Nós Propomos! Sertã
Construção (C)erta - Nós Propomos! SertãIlda Bicacro
 

Último (20)

Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdfCurrículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
 
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEMPRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
 
Análise poema país de abril (Mauel alegre)
Análise poema país de abril (Mauel alegre)Análise poema país de abril (Mauel alegre)
Análise poema país de abril (Mauel alegre)
 
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdfProjeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
 
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptxSlides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
 
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdfENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
 
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdfProjeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
 
INTERVENÇÃO PARÁ - Formação de Professor
INTERVENÇÃO PARÁ - Formação de ProfessorINTERVENÇÃO PARÁ - Formação de Professor
INTERVENÇÃO PARÁ - Formação de Professor
 
CRUZADINHA - Leitura e escrita dos números
CRUZADINHA   -   Leitura e escrita dos números CRUZADINHA   -   Leitura e escrita dos números
CRUZADINHA - Leitura e escrita dos números
 
COMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcante
COMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcanteCOMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcante
COMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcante
 
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
 
o ciclo do contato Jorge Ponciano Ribeiro.pdf
o ciclo do contato Jorge Ponciano Ribeiro.pdfo ciclo do contato Jorge Ponciano Ribeiro.pdf
o ciclo do contato Jorge Ponciano Ribeiro.pdf
 
Atividade - Letra da música Esperando na Janela.
Atividade -  Letra da música Esperando na Janela.Atividade -  Letra da música Esperando na Janela.
Atividade - Letra da música Esperando na Janela.
 
matematica aula didatica prática e tecni
matematica aula didatica prática e tecnimatematica aula didatica prática e tecni
matematica aula didatica prática e tecni
 
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptxSlides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
 
Revolução russa e mexicana. Slides explicativos e atividades
Revolução russa e mexicana. Slides explicativos e atividadesRevolução russa e mexicana. Slides explicativos e atividades
Revolução russa e mexicana. Slides explicativos e atividades
 
PROJETO DE EXTENSÃO I - Radiologia Tecnologia
PROJETO DE EXTENSÃO I - Radiologia TecnologiaPROJETO DE EXTENSÃO I - Radiologia Tecnologia
PROJETO DE EXTENSÃO I - Radiologia Tecnologia
 
planejamento_estrategico_-_gestao_2021-2024_16015654.pdf
planejamento_estrategico_-_gestao_2021-2024_16015654.pdfplanejamento_estrategico_-_gestao_2021-2024_16015654.pdf
planejamento_estrategico_-_gestao_2021-2024_16015654.pdf
 
Bloco de português com artigo de opinião 8º A, B 3.docx
Bloco de português com artigo de opinião 8º A, B 3.docxBloco de português com artigo de opinião 8º A, B 3.docx
Bloco de português com artigo de opinião 8º A, B 3.docx
 
Construção (C)erta - Nós Propomos! Sertã
Construção (C)erta - Nós Propomos! SertãConstrução (C)erta - Nós Propomos! Sertã
Construção (C)erta - Nós Propomos! Sertã
 

Competições de programação grafos BFS DFS

  • 1. TREINAMENTO PARA COMPETIÇÕES DE PROGRAMAÇÃO GRAFOS PARTE 1 TAP TURMA INICIANTE Murilo Adriano Vasconcelos e Paulo Cezar P. Costa - INF/UFG http://murilo.wordpress.com 1
  • 3. Grafos • O que é um grafo? • Tipos de grafos • Representações de grafos • Algoritmos de busca • Aplicações dos algoritmos de busca 3
  • 4. O que é um grafo? • Uma representação abstrata que pode ser usada para descrever a organização de sistemas de transportes, interações humanas, redes de telecomunicação entre outros. 4
  • 5. O que é um grafo? Matematicamente denotado como: G = (V, E), onde V é o conjunto de vértices e E o conjunto de arestas (edges) formado por pares ordenados ou não de vértices do conjunto V. 5
  • 6. Tipos de grafos • Direcionados / Não-direcionados • Ponderados / Não-ponderados • Cíclicos / Acíclicos • Esparsos / Densos 6
  • 7. Grafos Não-Direcionados • Um grafo G(V, E) é dito não- direcionado se a existência de uma aresta (u, v) ∈ E implica que a aresta (v, u) também pertence a E • Estradas interligando cidades são exemplos de relações que podem ser representadas por grafos não-direcionados uma vez que as estradas possuem duplo sentido 7
  • 8. Grafos Direcionados • Se a presença de uma aresta (u, v) não implica na existência da aresta (v, u) então dizemos que o grafo é direcionado • Ruas de uma cidade podem ser vistas como um grafo direcionado pois nem todas as ruas possuem mão-dupla. 8
  • 9. Grafos Não-Direcionados / Direcionados Não-direcionado Direcionado *Figuras retiradas de [TADM] p.147 9
  • 10. Grafos Ponderados • Em um grafo ponderado, cada aresta (ou vértice) possui um valor que pode denotar o peso, custo, ganho etc. • Em um grafo representando as cidades e as estradas que as interligam, os valores das arestas podem representar, por exemplo, o comprimento, o tempo de direção, o limite de velocidade ou o custo do pedágio de cada estrada. 10
  • 11. Grafos Não-ponderados • Em um grafo não-ponderado, não há distinção de custo ou valor entre as arestas. Isto é, cada aresta possui o mesmo valor. • Este tipo de grafo é utilizado quando o que importa são somente os relacionamentos. 11
  • 12. Grafos Não-Ponderados / Ponderados Não-ponderado Ponderado *Figuras retiradas de [TADM] p.147 12
  • 13. Grafos Cíclicos • Um grafo cíclico é um grafo que não contém ciclos, ou seja, se partindo de um vértice v, conseguimos chegar a um vértice u, então a partir de u não conseguimos chegar novamente a v a não ser voltando pelo caminho usado de v até u 13
  • 14. Grafos Acíclicos • Um grafo é acíclico se não contém ciclos • Grafos conexos não-direcionados acíclicos? • Árvores!!! • Grafos direcionados acíclicos (DAGs) 14
  • 15. Grafos Acíclicos / Cíclicos Acíclico Cíclico *Figuras retiradas de [TADM] p.147 15
  • 16. Grafos Esparsos / Densos • Um grafo G(V, E) é chamado esparso se |E| for muito menor que |V|2 • Se um grafo possui o número de arestas (| E|) próximo do número de vértices ao quadrado (|V|2), então dizemos que este grafo é denso. 16
  • 17. Representações de grafos • Duas formas principais • Matrizes de adjacência • Lista de adjacência • É de suma importância saber identificar a representação correta para a resolução de problemas 17
  • 18. Representações de grafos: Matrizes de adjacência - 1 2 3 4 5 1 2 1 1 1 0 1 0 2 1 1 0 1 0 3 4 3 0 0 1 1 1 5 4 1 1 0 1 1 5 0 0 1 1 1 18
  • 19. Representações de grafos: Matrizes de adjacência • Vantagens: • Facilidade e rapidez de implementação • Fácil checar se a aresta (i, j) existe ou não • Desvantagens: • Alocar uma matriz n pode não ser bom 2 • Ex.: 3000 de 4 bytes! de 9,000,000 posicões cidades, array 19
  • 20. Representações de grafos: Listas de adjacência • Podemos representar grafos esparsos de uma forma mais eficiente com listas de adjacência • Cada vértice possui uma lista de vértices associada • Se existe uma aresta (u, v) no grafo então a lista do vértice u contém o vértice v 20
  • 21. Representações de grafos: Listas de adjacência • Vantagens • Menor consumo de memória (n + m) • Não contém arestas inexistentes no grafo original, diminuindo assim a complexidade de buscas no grafo • Desvantagens •Codificação mais demorada •Checar se a aresta (u, v) existe é mais demorado 21
  • 22. Representações de grafos: Comparativo Comparação Vencedor Checar se (u, v) pertence ao grafo matrizes de adjacência O(1) Checar o grau de um vértice listas de ajacência Memória em grafos pequenos listas de adjacência (n + m) vs n2 Inserção ou remoção de arestas matrizes de adjacência O(1) vs O(d) Busca em grafos listas de ajacência Θ(m + n) vs Θ(n2) Velocidade de implementação matrizes de adjacência Melhor para a maioria dos problemas listas de ajacência *Sugerido por [TADM] p.152 22
  • 23. Implementação: Matrizes de adjacência // Declarando const int MAX_VERTICES = 100; tipo grafo[MAX_VERTICES][MAX_VERTICES]; // Inicializando for (int i = 0; i < num_arestas; ++i) for (int j = i; j < num_arestas; ++j) grafo[i][j] = grafo[j][i] = 0; // Populando int u, v; for (int i = 0; i < num_arestas; ++i) { cin >> u >> v; grafo[u][v] = w; // grafo[v][u] = w; se não for direcionado // grafo[u][v] = true; se não for ponderado } 23
  • 24. Implementação: Listas de adjacência #include <list> // std::list #include <utility> // pair<> e make_pair() using namespace std; // Declarando const int MAX_VERTICES = 100; list< pair<tipo, int> > grafo[MAX_VERTICES]; // Inicializando for (int i = 0; i < num_arestas; ++i) grafo[i].clear(); // Populando int u, v, w; for (int i = 0; i < num_arestas; ++i) { cin >> u >> v >> w; grafo[u].push_back(make_pair(v,w)); } Nem tão mais complicado assim... :) 24
  • 25. Algoritmos de busca em grafos • Dois principais: • Busca em largura (ou Breadth-First Search - BFS) • Busca em profundidade (ou Depth-First Search - DFS) 25
  • 26. Algoritmos de busca em grafos - Busca em largura • Expande todos os vizinhos de um vértice primeiro: 26
  • 27. Algoritmos de busca em grafos - Busca em largura • Expande todos os vizinhos de um vértice primeiro: 26
  • 28. Algoritmos de busca em grafos - Busca em largura • Expande todos os vizinhos de um vértice primeiro: 26
  • 29. Algoritmos de busca em grafos - Busca em largura • Expande todos os vizinhos de um vértice primeiro: 26
  • 30. Algoritmos de busca em grafos - Busca em largura • Expande todos os vizinhos de um vértice primeiro: 26
  • 31. Algoritmos de busca em grafos - Busca em largura • Expande todos os vizinhos de um vértice primeiro: 26
  • 32. Algoritmos de busca em grafos - Busca em largura • Expande todos os vizinhos de um vértice primeiro: 26
  • 33. Algoritmos de busca em grafos - Busca em largura • Expande todos os vizinhos de um vértice primeiro: 26
  • 34. Algoritmos de busca em grafos - Busca em largura • Expande todos os vizinhos de um vértice primeiro: 26
  • 35. Algoritmos de busca em grafos - Busca em largura • Expande todos os vizinhos de um vértice primeiro: 26
  • 36. Algoritmos de busca em grafos - Busca em largura • Expande todos os vizinhos de um vértice primeiro: 26
  • 37. Algoritmos de busca em grafos - Busca em largura • Expande todos os vizinhos de um vértice primeiro: 26
  • 38. Algoritmos de busca em grafos - Busca em largura • Expande todos os vizinhos de um vértice primeiro: 26
  • 39. Algoritmos de busca em grafos - Busca em largura • Expande todos os vizinhos de um vértice primeiro: 26
  • 40. Algoritmos de busca em grafos - Busca em largura • Expande todos os vizinhos de um vértice primeiro: 26
  • 41. Algoritmos de busca em grafos - Busca em largura • Expande todos os vizinhos de um vértice primeiro: 26
  • 42. Algoritmos de busca em grafos - Busca em largura • Expande todos os vizinhos de um vértice primeiro: 26
  • 43. Algoritmos de busca em grafos - Busca em largura • Expande todos os vizinhos de um vértice primeiro: 26
  • 44. Algoritmos de busca em grafos - Busca em largura • Expande todos os vizinhos de um vértice primeiro: 26
  • 45. Algoritmos de busca em grafos - Busca em largura • Expande todos os vizinhos de um vértice primeiro: 26
  • 46. Algoritmos de busca em grafos - Busca em largura • Expande todos os vizinhos de um vértice primeiro: 26
  • 47. Implementação: Busca em largura #include <list> // std::list #include <utility> // pair<> e make_pair() using namespace std; // Declarando const int MAX_VERTICES = 100; int grafo[MAX_VERTICES][MAX_VERTICES]; bool visitado[MAX_VERTICES]; void bfs(int origem, int num_vertices) { for (int i = 0; i < num_vertices; ++i) { visitado[i] = false; } // Fila que guarda a ordem de visita dos vértices list<int> fila; /*...*/ 27
  • 48. Implementação: Busca em largura void bfs(int origem, int num_vertices) { for (int i = 0; i < num_vertices; ++i) { visitado[i] = false; } // Fila que guarda a ordem de visita dos vértices list<int> fila; // Adiciona a origem na fila fila.push_back(origem); visitado[origem] = true; int atual; // vértice atual que estamos visitando while (!fila.empty()) { atual = fila.front(); // pega o 1o vértice fila.pop_front(); // remove ele da fila for (int i = 0; i < num_vertices; ++i) { if (grafo[atual][i] && !visitado[i]) { lista.push_back(i); visited[i] = true; } } } 28
  • 49. Algoritmos de busca em grafos - Busca em largura 3 5 2 4 0 6 1 29
  • 50. Algoritmos de busca em grafos - Busca em largura 3 5 2 4 0 0 1 2 3 4 5 6 6 0 - 1 1 1 0 0 0 1 1 - 0 0 0 0 1 1 2 1 0 - 0 0 0 1 3 1 0 0 - 0 1 0 4 0 0 0 0 - 0 1 5 0 0 0 1 0 - 0 6 0 1 1 0 1 0 - 29
  • 51. Algoritmos de busca em grafos - Busca em largura VISITADO 0 1 2 3 4 5 6 F F F F F F F 3 5 2 4 0 0 1 2 3 4 5 6 6 0 - 1 1 1 0 0 0 1 1 - 0 0 0 0 1 1 2 1 0 - 0 0 0 1 3 1 0 0 - 0 1 0 4 0 0 0 0 - 0 1 5 0 0 0 1 0 - 0 6 0 1 1 0 1 0 - 29
  • 52. Algoritmos de busca em grafos - Busca em largura FILA: 0 VISITADO 0 1 2 3 4 5 6 F F F F F F F 3 5 2 4 0 0 1 2 3 4 5 6 6 0 - 1 1 1 0 0 0 1 1 - 0 0 0 0 1 1 2 1 0 - 0 0 0 1 3 1 0 0 - 0 1 0 4 0 0 0 0 - 0 1 5 0 0 0 1 0 - 0 6 0 1 1 0 1 0 - 29
  • 53. Algoritmos de busca em grafos - Busca em largura FILA: 0 VISITADO 0 1 2 3 4 5 6 F F F F F F F 3 5 2 4 0 0 1 2 3 4 5 6 6 0 - 1 1 1 0 0 0 1 1 - 0 0 0 0 1 1 2 1 0 - 0 0 0 1 3 1 0 0 - 0 1 0 4 0 0 0 0 - 0 1 5 0 0 0 1 0 - 0 6 0 1 1 0 1 0 - 29
  • 54. Algoritmos de busca em grafos - Busca em largura FILA: 0 VISITADO 0 1 2 3 4 5 6 T F F F F F F F 3 5 2 4 0 0 1 2 3 4 5 6 6 0 - 1 1 1 0 0 0 1 1 - 0 0 0 0 1 1 2 1 0 - 0 0 0 1 3 1 0 0 - 0 1 0 4 0 0 0 0 - 0 1 5 0 0 0 1 0 - 0 6 0 1 1 0 1 0 - 29
  • 55. Algoritmos de busca em grafos - Busca em largura FILA: 0 VISITADO 0 1 2 3 4 5 6 T F F F F F F F 3 5 2 4 0 0 1 2 3 4 5 6 6 0 - 1 1 1 0 0 0 1 1 - 0 0 0 0 1 1 2 1 0 - 0 0 0 1 3 1 0 0 - 0 1 0 4 0 0 0 0 - 0 1 5 0 0 0 1 0 - 0 6 0 1 1 0 1 0 - 29
  • 56. Algoritmos de busca em grafos - Busca em largura FILA: 0 3 VISITADO 0 1 2 3 4 5 6 T F F F F F F F 3 5 2 4 0 0 1 2 3 4 5 6 6 0 - 1 1 1 0 0 0 1 1 - 0 0 0 0 1 1 2 1 0 - 0 0 0 1 3 1 0 0 - 0 1 0 4 0 0 0 0 - 0 1 5 0 0 0 1 0 - 0 6 0 1 1 0 1 0 - 29
  • 57. Algoritmos de busca em grafos - Busca em largura FILA: 0 3 VISITADO 0 1 2 3 4 5 6 T F F F T F F F F 3 5 2 4 0 0 1 2 3 4 5 6 6 0 - 1 1 1 0 0 0 1 1 - 0 0 0 0 1 1 2 1 0 - 0 0 0 1 3 1 0 0 - 0 1 0 4 0 0 0 0 - 0 1 5 0 0 0 1 0 - 0 6 0 1 1 0 1 0 - 29
  • 58. Algoritmos de busca em grafos - Busca em largura FILA: 0 3 VISITADO 0 1 2 3 4 5 6 T F F F T F F F F 3 5 2 4 0 0 1 2 3 4 5 6 6 0 - 1 1 1 0 0 0 1 1 - 0 0 0 0 1 1 2 1 0 - 0 0 0 1 3 1 0 0 - 0 1 0 4 0 0 0 0 - 0 1 5 0 0 0 1 0 - 0 6 0 1 1 0 1 0 - 29
  • 59. Algoritmos de busca em grafos - Busca em largura FILA: 0 2 3 VISITADO 0 1 2 3 4 5 6 T F F F T F F F F 3 5 2 4 0 0 1 2 3 4 5 6 6 0 - 1 1 1 0 0 0 1 1 - 0 0 0 0 1 1 2 1 0 - 0 0 0 1 3 1 0 0 - 0 1 0 4 0 0 0 0 - 0 1 5 0 0 0 1 0 - 0 6 0 1 1 0 1 0 - 29
  • 60. Algoritmos de busca em grafos - Busca em largura FILA: 0 2 3 VISITADO 0 1 2 3 4 5 6 T F F T T F F F F F 3 5 2 4 0 0 1 2 3 4 5 6 6 0 - 1 1 1 0 0 0 1 1 - 0 0 0 0 1 1 2 1 0 - 0 0 0 1 3 1 0 0 - 0 1 0 4 0 0 0 0 - 0 1 5 0 0 0 1 0 - 0 6 0 1 1 0 1 0 - 29
  • 61. Algoritmos de busca em grafos - Busca em largura FILA: 0 2 3 VISITADO 0 1 2 3 4 5 6 T F F T T F F F F F 3 5 2 4 0 0 1 2 3 4 5 6 6 0 - 1 1 1 0 0 0 1 1 - 0 0 0 0 1 1 2 1 0 - 0 0 0 1 3 1 0 0 - 0 1 0 4 0 0 0 0 - 0 1 5 0 0 0 1 0 - 0 6 0 1 1 0 1 0 - 29
  • 62. Algoritmos de busca em grafos - Busca em largura FILA: 0 2 1 3 VISITADO 0 1 2 3 4 5 6 T F F T T F F F F F 3 5 2 4 0 0 1 2 3 4 5 6 6 0 - 1 1 1 0 0 0 1 1 - 0 0 0 0 1 1 2 1 0 - 0 0 0 1 3 1 0 0 - 0 1 0 4 0 0 0 0 - 0 1 5 0 0 0 1 0 - 0 6 0 1 1 0 1 0 - 29
  • 63. Algoritmos de busca em grafos - Busca em largura FILA: 0 2 1 3 VISITADO 0 1 2 3 4 5 6 T T T T F F F F F F F 3 5 2 4 0 0 1 2 3 4 5 6 6 0 - 1 1 1 0 0 0 1 1 - 0 0 0 0 1 1 2 1 0 - 0 0 0 1 3 1 0 0 - 0 1 0 4 0 0 0 0 - 0 1 5 0 0 0 1 0 - 0 6 0 1 1 0 1 0 - 29
  • 64. Algoritmos de busca em grafos - Busca em largura FILA: 0 2 1 3 VISITADO 0 1 2 3 4 5 6 T T T T F F F F F F F 3 5 2 4 0 0 1 2 3 4 5 6 6 0 - 1 1 1 0 0 0 1 1 - 0 0 0 0 1 1 2 1 0 - 0 0 0 1 3 1 0 0 - 0 1 0 4 0 0 0 0 - 0 1 5 0 0 0 1 0 - 0 6 0 1 1 0 1 0 - 29
  • 65. Algoritmos de busca em grafos - Busca em largura FILA: 0 2 1 3 VISITADO 0 1 2 3 4 5 6 T T T T F F F F F F F 3 5 2 4 0 0 1 2 3 4 5 6 6 0 - 1 1 1 0 0 0 1 1 - 0 0 0 0 1 1 2 1 0 - 0 0 0 1 3 1 0 0 - 0 1 0 4 0 0 0 0 - 0 1 5 0 0 0 1 0 - 0 6 0 1 1 0 1 0 - 29
  • 66. Algoritmos de busca em grafos - Busca em largura FILA: 0 2 1 2 31 VISITADO 0 1 2 3 4 5 6 T T T T F F F F F F F 3 5 2 4 0 0 1 2 3 4 5 6 6 0 - 1 1 1 0 0 0 1 1 - 0 0 0 0 1 1 2 1 0 - 0 0 0 1 3 1 0 0 - 0 1 0 4 0 0 0 0 - 0 1 5 0 0 0 1 0 - 0 6 0 1 1 0 1 0 - 29
  • 67. Algoritmos de busca em grafos - Busca em largura FILA: 0 2 1 2 31 VISITADO 0 1 2 3 4 5 6 T T T T F F F F F F F 3 5 2 4 0 0 1 2 3 4 5 6 6 0 - 1 1 1 0 0 0 1 1 - 0 0 0 0 1 1 2 1 0 - 0 0 0 1 3 1 0 0 - 0 1 0 4 0 0 0 0 - 0 1 5 0 0 0 1 0 - 0 6 0 1 1 0 1 0 - 29
  • 68. Algoritmos de busca em grafos - Busca em largura FILA: 0 2 1 2 315 VISITADO 0 1 2 3 4 5 6 T T T T F F F F F F F 3 5 2 4 0 0 1 2 3 4 5 6 6 0 - 1 1 1 0 0 0 1 1 - 0 0 0 0 1 1 2 1 0 - 0 0 0 1 3 1 0 0 - 0 1 0 4 0 0 0 0 - 0 1 5 0 0 0 1 0 - 0 6 0 1 1 0 1 0 - 29
  • 69. Algoritmos de busca em grafos - Busca em largura FILA: 0 2 1 2 315 VISITADO 0 1 2 3 4 5 6 T T T T F F F F F T F F 3 5 2 4 0 0 1 2 3 4 5 6 6 0 - 1 1 1 0 0 0 1 1 - 0 0 0 0 1 1 2 1 0 - 0 0 0 1 3 1 0 0 - 0 1 0 4 0 0 0 0 - 0 1 5 0 0 0 1 0 - 0 6 0 1 1 0 1 0 - 29
  • 70. Algoritmos de busca em grafos - Busca em largura FILA: 0 2 1 2 315 VISITADO 0 1 2 3 4 5 6 T T T T F F F F F T F F 3 5 2 4 0 0 1 2 3 4 5 6 6 0 - 1 1 1 0 0 0 1 1 - 0 0 0 0 1 1 2 1 0 - 0 0 0 1 3 1 0 0 - 0 1 0 4 0 0 0 0 - 0 1 5 0 0 0 1 0 - 0 6 0 1 1 0 1 0 - 29
  • 71. Algoritmos de busca em grafos - Busca em largura FILA: 0 2 1 2 315 VISITADO 0 1 2 3 4 5 6 T T T T F F F F F T F F 3 5 2 4 0 0 1 2 3 4 5 6 6 0 - 1 1 1 0 0 0 1 1 - 0 0 0 0 1 1 2 1 0 - 0 0 0 1 3 1 0 0 - 0 1 0 4 0 0 0 0 - 0 1 5 0 0 0 1 0 - 0 6 0 1 1 0 1 0 - 29
  • 72. Algoritmos de busca em grafos - Busca em largura FILA: 0 2 1 1 25 315 VISITADO 0 1 2 3 4 5 6 T T T T F F F F F T F F 3 5 2 4 0 0 1 2 3 4 5 6 6 0 - 1 1 1 0 0 0 1 1 - 0 0 0 0 1 1 2 1 0 - 0 0 0 1 3 1 0 0 - 0 1 0 4 0 0 0 0 - 0 1 5 0 0 0 1 0 - 0 6 0 1 1 0 1 0 - 29
  • 73. Algoritmos de busca em grafos - Busca em largura FILA: 0 2 1 1 25 315 VISITADO 0 1 2 3 4 5 6 T T T T F F F F F T F F 3 5 2 4 0 0 1 2 3 4 5 6 6 0 - 1 1 1 0 0 0 1 1 - 0 0 0 0 1 1 2 1 0 - 0 0 0 1 3 1 0 0 - 0 1 0 4 0 0 0 0 - 0 1 5 0 0 0 1 0 - 0 6 0 1 1 0 1 0 - 29
  • 74. Algoritmos de busca em grafos - Busca em largura FILA: 0 2 1 1 256 315 VISITADO 0 1 2 3 4 5 6 T T T T F F F F F T F F 3 5 2 4 0 0 1 2 3 4 5 6 6 0 - 1 1 1 0 0 0 1 1 - 0 0 0 0 1 1 2 1 0 - 0 0 0 1 3 1 0 0 - 0 1 0 4 0 0 0 0 - 0 1 5 0 0 0 1 0 - 0 6 0 1 1 0 1 0 - 29
  • 75. Algoritmos de busca em grafos - Busca em largura FILA: 0 2 1 1 256 315 VISITADO 0 1 2 3 4 5 6 T T T T F F F F F T T F F 3 5 2 4 0 0 1 2 3 4 5 6 6 0 - 1 1 1 0 0 0 1 1 - 0 0 0 0 1 1 2 1 0 - 0 0 0 1 3 1 0 0 - 0 1 0 4 0 0 0 0 - 0 1 5 0 0 0 1 0 - 0 6 0 1 1 0 1 0 - 29
  • 76. Algoritmos de busca em grafos - Busca em largura FILA: 0 2 1 1 256 315 VISITADO 0 1 2 3 4 5 6 T T T T F F F F F T T F F 3 5 2 4 0 0 1 2 3 4 5 6 6 0 - 1 1 1 0 0 0 1 1 - 0 0 0 0 1 1 2 1 0 - 0 0 0 1 3 1 0 0 - 0 1 0 4 0 0 0 0 - 0 1 5 0 0 0 1 0 - 0 6 0 1 1 0 1 0 - 29
  • 77. Algoritmos de busca em grafos - Busca em largura FILA: 0 2 1 1 256 315 VISITADO 0 1 2 3 4 5 6 T T T T F F F F F T T F F 3 5 2 4 0 0 1 2 3 4 5 6 6 0 - 1 1 1 0 0 0 1 1 - 0 0 0 0 1 1 2 1 0 - 0 0 0 1 3 1 0 0 - 0 1 0 4 0 0 0 0 - 0 1 5 0 0 0 1 0 - 0 6 0 1 1 0 1 0 - 29
  • 78. Algoritmos de busca em grafos - Busca em largura FILA: 0 2 1 5 16 256 315 VISITADO 0 1 2 3 4 5 6 T T T T F F F F F T T F F 3 5 2 4 0 0 1 2 3 4 5 6 6 0 - 1 1 1 0 0 0 1 1 - 0 0 0 0 1 1 2 1 0 - 0 0 0 1 3 1 0 0 - 0 1 0 4 0 0 0 0 - 0 1 5 0 0 0 1 0 - 0 6 0 1 1 0 1 0 - 29
  • 79. Algoritmos de busca em grafos - Busca em largura FILA: 0 2 1 5 16 256 315 VISITADO 0 1 2 3 4 5 6 T T T T F F F F F T T F F 3 5 2 4 0 0 1 2 3 4 5 6 6 0 - 1 1 1 0 0 0 1 1 - 0 0 0 0 1 1 2 1 0 - 0 0 0 1 3 1 0 0 - 0 1 0 4 0 0 0 0 - 0 1 5 0 0 0 1 0 - 0 6 0 1 1 0 1 0 - 29
  • 80. Algoritmos de busca em grafos - Busca em largura FILA: 0 2 1 5 16 256 315 VISITADO 0 1 2 3 4 5 6 T T T T F F F F F T T F F 3 5 2 4 0 0 1 2 3 4 5 6 6 0 - 1 1 1 0 0 0 1 1 - 0 0 0 0 1 1 2 1 0 - 0 0 0 1 3 1 0 0 - 0 1 0 4 0 0 0 0 - 0 1 5 0 0 0 1 0 - 0 6 0 1 1 0 1 0 - 29
  • 81. Algoritmos de busca em grafos - Busca em largura FILA: 0 2 1 6 5 16 256 315 VISITADO 0 1 2 3 4 5 6 T T T T F F F F F T T F F 3 5 2 4 0 0 1 2 3 4 5 6 6 0 - 1 1 1 0 0 0 1 1 - 0 0 0 0 1 1 2 1 0 - 0 0 0 1 3 1 0 0 - 0 1 0 4 0 0 0 0 - 0 1 5 0 0 0 1 0 - 0 6 0 1 1 0 1 0 - 29
  • 82. Algoritmos de busca em grafos - Busca em largura FILA: 0 2 1 6 5 16 256 315 VISITADO 0 1 2 3 4 5 6 T T T T F F F F F T T F F 3 5 2 4 0 0 1 2 3 4 5 6 6 0 - 1 1 1 0 0 0 1 1 - 0 0 0 0 1 1 2 1 0 - 0 0 0 1 3 1 0 0 - 0 1 0 4 0 0 0 0 - 0 1 5 0 0 0 1 0 - 0 6 0 1 1 0 1 0 - 29
  • 83. Algoritmos de busca em grafos - Busca em largura FILA: 0 2 1 6 5 16 256 315 VISITADO 0 1 2 3 4 5 6 T T T T F F F F F T T F F 3 5 2 4 0 0 1 2 3 4 5 6 6 0 - 1 1 1 0 0 0 1 1 - 0 0 0 0 1 1 2 1 0 - 0 0 0 1 3 1 0 0 - 0 1 0 4 0 0 0 0 - 0 1 5 0 0 0 1 0 - 0 6 0 1 1 0 1 0 - 29
  • 84. Algoritmos de busca em grafos - Busca em largura FILA: 0 2 1 6 5 16 256 315 VISITADO 0 1 2 3 4 5 6 T T T T F F F F F T T F F 3 5 2 4 0 0 1 2 3 4 5 6 6 0 - 1 1 1 0 0 0 1 1 - 0 0 0 0 1 1 2 1 0 - 0 0 0 1 3 1 0 0 - 0 1 0 4 0 0 0 0 - 0 1 5 0 0 0 1 0 - 0 6 0 1 1 0 1 0 - 29
  • 85. Algoritmos de busca em grafos - Busca em largura FILA: 0 2 1 6 5 16 256 315 VISITADO 0 1 2 3 4 5 6 T T T T F F F F F T T F F 3 5 2 4 0 0 1 2 3 4 5 6 6 0 - 1 1 1 0 0 0 1 1 - 0 0 0 0 1 1 2 1 0 - 0 0 0 1 3 1 0 0 - 0 1 0 4 0 0 0 0 - 0 1 5 0 0 0 1 0 - 0 6 0 1 1 0 1 0 - 29
  • 86. Algoritmos de busca em grafos - Busca em largura FILA: 0 2 1 4 6 5 16 256 315 VISITADO 0 1 2 3 4 5 6 T T T T F F F F F T T F F 3 5 2 4 0 0 1 2 3 4 5 6 6 0 - 1 1 1 0 0 0 1 1 - 0 0 0 0 1 1 2 1 0 - 0 0 0 1 3 1 0 0 - 0 1 0 4 0 0 0 0 - 0 1 5 0 0 0 1 0 - 0 6 0 1 1 0 1 0 - 29
  • 87. Algoritmos de busca em grafos - Busca em largura FILA: 0 2 1 4 6 5 16 256 315 VISITADO 0 1 2 3 4 5 6 T T T T T T T F F F F F F F 3 5 2 4 0 0 1 2 3 4 5 6 6 0 - 1 1 1 0 0 0 1 1 - 0 0 0 0 1 1 2 1 0 - 0 0 0 1 3 1 0 0 - 0 1 0 4 0 0 0 0 - 0 1 5 0 0 0 1 0 - 0 6 0 1 1 0 1 0 - 29
  • 88. Algoritmos de busca em grafos - Busca em largura FILA: 0 2 1 4 6 5 16 256 315 VISITADO 0 1 2 3 4 5 6 T T T T T T T F F F F F F F 3 5 2 4 0 0 1 2 3 4 5 6 6 0 - 1 1 1 0 0 0 1 1 - 0 0 0 0 1 1 2 1 0 - 0 0 0 1 3 1 0 0 - 0 1 0 4 0 0 0 0 - 0 1 5 0 0 0 1 0 - 0 6 0 1 1 0 1 0 - 29
  • 89. Algoritmos de busca em grafos - Busca em largura FILA: 0 2 1 4 6 5 16 256 315 VISITADO 0 1 2 3 4 5 6 T T T T T T T F F F F F F F 3 5 2 4 0 0 1 2 3 4 5 6 6 0 - 1 1 1 0 0 0 1 1 - 0 0 0 0 1 1 2 1 0 - 0 0 0 1 3 1 0 0 - 0 1 0 4 0 0 0 0 - 0 1 5 0 0 0 1 0 - 0 6 0 1 1 0 1 0 - 29
  • 90. Algoritmos de busca em grafos - Busca em largura FILA: 0 2 1 4 6 5 16 256 315 VISITADO 0 1 2 3 4 5 6 T T T T T T T F F F F F F F 3 5 2 4 0 0 1 2 3 4 5 6 6 0 - 1 1 1 0 0 0 1 1 - 0 0 0 0 1 1 2 1 0 - 0 0 0 1 3 1 0 0 - 0 1 0 4 0 0 0 0 - 0 1 5 0 0 0 1 0 - 0 6 0 1 1 0 1 0 - 29
  • 91. Algoritmos de busca em grafos - Busca em largura FILA: 0 2 1 4 6 5 16 256 315 VISITADO 0 1 2 3 4 5 6 T T T T T T T F F F F F F F 3 5 2 4 0 0 1 2 3 4 5 6 6 0 - 1 1 1 0 0 0 1 1 - 0 0 0 0 1 1 2 1 0 - 0 0 0 1 3 1 0 0 - 0 1 0 4 0 0 0 0 - 0 1 5 0 0 0 1 0 - 0 6 0 1 1 0 1 0 - 29
  • 92. Algoritmos de busca em grafos - Busca em profundidade • Explora primeiro o último vértice colocado na lista (funciona como uma pilha): 30
  • 93. Algoritmos de busca em grafos - Busca em profundidade • Explora primeiro o último vértice colocado na lista (funciona como uma pilha): 30
  • 94. Algoritmos de busca em grafos - Busca em profundidade • Explora primeiro o último vértice colocado na lista (funciona como uma pilha): 30
  • 95. Algoritmos de busca em grafos - Busca em profundidade • Explora primeiro o último vértice colocado na lista (funciona como uma pilha): 30
  • 96. Algoritmos de busca em grafos - Busca em profundidade • Explora primeiro o último vértice colocado na lista (funciona como uma pilha): 30
  • 97. Algoritmos de busca em grafos - Busca em profundidade • Explora primeiro o último vértice colocado na lista (funciona como uma pilha): 30
  • 98. Algoritmos de busca em grafos - Busca em profundidade • Explora primeiro o último vértice colocado na lista (funciona como uma pilha): 30
  • 99. Algoritmos de busca em grafos - Busca em profundidade • Explora primeiro o último vértice colocado na lista (funciona como uma pilha): 30
  • 100. Algoritmos de busca em grafos - Busca em profundidade • Explora primeiro o último vértice colocado na lista (funciona como uma pilha): 30
  • 101. Algoritmos de busca em grafos - Busca em profundidade • Explora primeiro o último vértice colocado na lista (funciona como uma pilha): 30
  • 102. Algoritmos de busca em grafos - Busca em profundidade • Explora primeiro o último vértice colocado na lista (funciona como uma pilha): 30
  • 103. Algoritmos de busca em grafos - Busca em profundidade • Explora primeiro o último vértice colocado na lista (funciona como uma pilha): 30
  • 104. Algoritmos de busca em grafos - Busca em profundidade • Explora primeiro o último vértice colocado na lista (funciona como uma pilha): 30
  • 105. Algoritmos de busca em grafos - Busca em profundidade • Explora primeiro o último vértice colocado na lista (funciona como uma pilha): 30
  • 106. Algoritmos de busca em grafos - Busca em profundidade • Explora primeiro o último vértice colocado na lista (funciona como uma pilha): 30
  • 107. Algoritmos de busca em grafos - Busca em profundidade • Explora primeiro o último vértice colocado na lista (funciona como uma pilha): 30
  • 108. Algoritmos de busca em grafos - Busca em profundidade • Explora primeiro o último vértice colocado na lista (funciona como uma pilha): 30
  • 109. Algoritmos de busca em grafos - Busca em profundidade • Explora primeiro o último vértice colocado na lista (funciona como uma pilha): 30
  • 110. Algoritmos de busca em grafos - Busca em profundidade • Explora primeiro o último vértice colocado na lista (funciona como uma pilha): 30
  • 111. Algoritmos de busca em grafos - Busca em profundidade • Explora primeiro o último vértice colocado na lista (funciona como uma pilha): 30
  • 112. Algoritmos de busca em grafos - Busca em profundidade • Explora primeiro o último vértice colocado na lista (funciona como uma pilha): 30
  • 113. Algoritmos de busca em grafos - Busca em profundidade • Explora primeiro o último vértice colocado na lista (funciona como uma pilha): 30
  • 114. Algoritmos de busca em grafos - Busca em profundidade • Explora primeiro o último vértice colocado na lista (funciona como uma pilha): 30
  • 115. Algoritmos de busca em grafos - Busca em profundidade • Explora primeiro o último vértice colocado na lista (funciona como uma pilha): 30
  • 116. Algoritmos de busca em grafos - Busca em profundidade • Explora primeiro o último vértice colocado na lista (funciona como uma pilha): 30
  • 117. Algoritmos de busca em grafos - Busca em profundidade • Explora primeiro o último vértice colocado na lista (funciona como uma pilha): 30
  • 118. Algoritmos de busca em grafos - Busca em profundidade • Explora primeiro o último vértice colocado na lista (funciona como uma pilha): 30
  • 119. Algoritmos de busca em grafos - Busca em profundidade • Explora primeiro o último vértice colocado na lista (funciona como uma pilha): 30
  • 120. Algoritmos de busca em grafos - Busca em profundidade • Explora primeiro o último vértice colocado na lista (funciona como uma pilha): 30
  • 121. Algoritmos de busca em grafos - Busca em profundidade • Explora primeiro o último vértice colocado na lista (funciona como uma pilha): 30
  • 122. Algoritmos de busca em grafos - Busca em profundidade • Explora primeiro o último vértice colocado na lista (funciona como uma pilha): 30
  • 123. Algoritmos de busca em grafos - Busca em profundidade • Explora primeiro o último vértice colocado na lista (funciona como uma pilha): 30
  • 124. Implementação: Busca em profundidade // Declarando const int MAX_VERTICES = 100; int grafo[MAX_VERTICES][MAX_VERTICES]; bool visitado[MAX_VERTICES]; int num_vertices; // qtd de vértices do grafo atual // Recursivamente visita todos os vértices // alcançáveis a partir de atual void dfs(int atual) { for (int i = 0; i < num_vertices; ++i) { if (grafo[atual][i] && !visitado[i]) { visitado[i] = true; dfs(i); } } } 31
  • 126. Aplicações • Verificar se um grafo é bicolorível • Detecção de Ciclos • Ordenação Topológica • Caminhos Mínimos (Grafos não ponderados) • Conectividade
  • 127. Aplicações: Bicoloração • Em algumas espécies é difícil distinguir os machos das fêmeas, como é o caso de uma espécie recém descoberta, os happyRockers. • Num laboratório são realizadas experiências para determinar potenciais machos e fêmeas em uma amostra.
  • 128. Aplicações: Bicoloração • São feitas anotações sempre que dois indivíduos se “relacionam”. • A espécie não é monogâmica, portanto um indivíduo A pode tranquilamente ter relações com os indivíduo B e C. • Porém, os sexos são bem definidos, machos apenas se relacionam com fêmeas e vice-versa. Então, se A se relaciona com B e C, estes são do mesmo sexo, o qual é diferente do sexo de A.
  • 129. Aplicações: Bicoloração • Dadas as anotações sobre as interações entre os indivíduos, o Dr. que coordena o laboratório quer saber se é possível distinguir quais indivíduos tem o mesmo sexo ou se existem indivíduos suspeitos no grupo. • Como resolver ?
  • 130. Aplicações: Bicoloração • O problema pode ser modelado em um grafo não direcionado. • Indivíduos são os vértices, relações são as arestas. • Tá, e agora ?
  • 131. Aplicações: Bicoloração • Queremos saber se é possível separar os vértices em dois conjuntos, onde os vértices pertencentes a cada conjunto não se relacionaram durante o experimento. • Ah, que legal, e como faço isso ?!? • Basta verificar se é possível colorir os vértices do grafo usando apenas duas cores, ou seja, verificar se o grafo é bicolorível/ bipartido.
  • 132. Aplicações: Bicoloração • E como fazer essa verificação ? • Fácil ! Basta fazer uma busca em largura.. • Começamos um BFS de cada vértice ainda não colorido, pintando ele de branco e adicionando na fila; • Quando tira-se um vértice da fila e vai processar seus vizinhos, tenta pintar eles da cor contrária a que o vértice atual está pintado.
  • 133. Aplicações: Bicoloração #include <iostream> #include <list> using namespace std; int main(){ int u, v, num_individuos, num_relacoes; list< int >::iterator w; cin >> num_individuos >> num_relacoes; list< int > grafo[num_individuos+1]; int cor[num_individuos+1]; for( u = 1; u <= num_individuos; u++ ) cor[u] = -1;
  • 134. Aplicações: Bicoloração while( num_relacoes-- ){ cin >> u >> v; grafo[u].push_back( v ); grafo[v].push_back( u ); } bool bipartido = true; for( int i = 1; i <= num_individuos && bipartido; i++ ){ if( cor[i] != -1 ) continue; cor[i] = 1; list< int > fila; fila.push_back( i );
  • 135. Aplicações: Bicoloração while( !fila.empty() && bipartido ){ u = fila.front(); fila.pop_front(); for( w = grafo[u].begin(); w != grafo[u].end(); w++ ){ if( cor[*w] == -1 ){ cor[*w] = 1-cor[u]; // pinta o vizinho da cor contraria fila.push_back( *w ); // e adiciona na fila } else if( cor[*w] != 1-cor[*w] ) { // O vizinho estava pintado da mesma cor, grafo nao e // bicolorivel. bipartido = false; break; } } }
  • 136. Aplicações: Bicoloração } if( bipartido ) cout << “Possivel distinguir os sexosn”; else cout << “Existem individuos suspeitos no grupon”; return 0; }
  • 137. Aplicações: Detecção de Ciclos • Sabemos que existem grafos cíclicos e acíclicos. • Mas dado um grafo, como seria uma algoritmo que verifica se ele é cíclico ou acíclico ?
  • 138. Aplicações: Detecção de Ciclos • Durante um DFS, podemos classificar as arestas do grafo em 3 tipos, são eles: • arestas descendentes - ligam ancestrais a descendentes • arestas de retorno - ligam descendentes a ancestrais • arestas cruzadas - ligam vértices sem relação ancestral/descendente
  • 139. Aplicações: Detecção de Ciclos • Um grafo tem um ciclo, se e somente se ele possui uma aresta de retorno. • Portanto, se durante uma busca em profundidade detectarmos tal tipo de aresta, podemos garantir que o grafo é cíclico.
  • 140. Aplicações: Detecção de Ciclos • A idéia apesar de muito parecida funciona de maneiras diferentes para grafos orientados e não orientados. • No grafo não orientado, inicialmente todos estão pintados de branco, e a medida que são descobertos são pintados de preto.
  • 141. Aplicações: Detecção de Ciclos • Quando um vértice tem uma aresta para um vértice pintado de preto ( que já foi descoberto ), e esse não é seu pai, essa é uma aresta de retorno. • Logo, o grafo tem um ciclo.
  • 142. Aplicações: Detecção de Ciclos • Nos grafos orientados, o fato de um vizinho já ter sido descoberto não significa que a aresta é de retorno; • Isso só é verdade se o vértice ainda estiver sendo processado.. • Portanto, precisamos diferenciar entre ‘não- usado’, ‘descoberto’ e ‘processado’
  • 143. Aplicações: Detecção de Ciclos • Num grafo direcionado uma aresta de retorno é uma aresta que aponta para um vértice ‘descoberto’. • Então.. vamos ao código !
  • 144. Aplicações: Detecção de Ciclos bool ciclico(){ for( int u = 1; u <= num_vert; u++ ) cor[u] = -1; for( int u = 1; u <= num_vert; u++ ) if( cor[u] == -1 ){ parent[u] = u; // necessario para grafos nao orientados if( dfsC( u ) ) return true; } return false; }
  • 145. Aplicações: Detecção de Ciclos bool dfsC( int u ){ // versao para grafos nao orientados cor[u] = 1; for( list<int>::iterator v = grafo[u].beging(); v != grafo[u].end(); v++ ){ if( cor[*v] == -1 ){ parent[*v] = u; if( dfsC( *v ) ) return true; } else if( *v != parent[u] ) return true; } return false; }
  • 146. Aplicações: Detecção de Ciclos bool dfsC( int u ){ // versao para grafos orientados cor[u] = 1; // vertice u foi descoberto for( list<int>::iterator v = grafo[u].beging(); v != grafo[u].end(); v++ ){ if( cor[*v] == -1 ){ if( dfsC( *v ) ) return true; } else if( cor[*v] == 1 ) return true; } cor[u] = 2; // vertice u foi processado return false; }
  • 147. Aplicações: Ordenação Topológica • No curso de Ciência da Computação algumas disciplinas possuem pré-requisitos. • Dadas as disciplinas que o aluno deve cursar e seus pré-requisitos como descobrir em qual ordem as matérias podem ser cursadas ?
  • 148. Aplicações: Ordenação Topológica • As disciplinas podem ser vistas como os vértices de um grafo; • Existe uma aresta direcionada do vértice X para o vértice Y se a disciplina X é pré- requisito da disciplina Y.
  • 149. Aplicações: Ordenação Topológica • Uma ordenação topológica ordena os vértices em uma linha de modo que as arestas são todas direcionadas da esquerda pra direita. • Logicamente, se o grafo é cíclico é impossível que tal ordenação exista.
  • 150. Aplicações: Ordenação Topológica • Mas como fazer uma ordenação topológica ? • Simples! Basta uma busca em profundidade para gerar uma ordenação topológica, ou retornar um erro caso o grafo seja cíclico. • Como assim ?
  • 151. Aplicações: Ordenação Topológica • Na busca em profundidade depois que analisamos todas as arestas que saem de um vértice, podemos garantir que ele não tem nenhuma aresta de entrada vindo de um vértice que já foi processado. • E se em algum momento detectamos a existência de um ciclo ? • Uma ordenação topológica não existe.
  • 152. Aplicações: Ordenação Topológica bool gera_ordenacao(){ ordem.clear(); // pilha onde a ordenacao sera armazenada for( int u = 1; u <= num_vert; u++ ) cor[u] = -1; for( int u = 1; u <= num_vert; u++ ) if( cor[u] == -1 ){ if( dfsT( u ) ) return false; } while( !ordem.empty() ){ int u = ordem.top(); ordem.pop(); cout << u << “ “; } return true; }
  • 153. Aplicações: Ordenação Topológica bool dfsT( int u ){ cor[u] = 1; // vertice u foi descoberto for( list<int>::iterator v = grafo[u].beging(); v != grafo[u].end(); v++ ){ if( cor[*v] == -1 ){ if( dfsC( *v ) ) return true; } else if( cor[*v] == 1 ) return true; } cor[u] = 2; // vertice u foi processado pilha.push( u ); return false; }
  • 154. Aplicações: Caminhos Mínimos • Num grafo não ponderado, quando queremos encontrar o menor caminho do vértice s ao vértice t, precisamos apenas de uma busca em largura.
  • 155. Aplicações: Caminhos Mínimos • Por que ? • Se as arestas não tem pesos diferentes, o custo do menor caminho de s para t é na verdade, a menor profundidade, partindo de s com que conseguimos visitar t.
  • 156. Aplicações: Caminhos Mínimos • Dado o funcionamento da busca em largura, isso é exatamente o que ela calcula. • Primeiro todos os vértices a profundidade 1 são visitados, em seguida todos que estão a profundidade 2 e assim por diante.
  • 157. Aplicações: Caminhos Mínimos int menorCaminho( int s, int t ){ int dist[num_vert]; memset( dist, -1, sizeof( dist ) ); dist[s] = 0; ... return dist[t]; }
  • 159. Referências e bibliografia • [TADM] - Steven S. Skiena -The Algorithm Design Manual • Thomas H. Cormen, Charles E. Leiserson - Introduction to Algorithms, Second Edition 66

Notas del editor

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n
  39. \n
  40. \n
  41. \n
  42. \n
  43. \n
  44. \n
  45. \n
  46. \n
  47. \n
  48. \n
  49. \n
  50. \n
  51. \n
  52. \n
  53. \n
  54. \n
  55. \n
  56. \n
  57. \n
  58. \n
  59. \n
  60. \n
  61. \n
  62. \n
  63. \n
  64. \n
  65. \n
  66. \n
  67. \n
  68. \n
  69. \n
  70. \n
  71. \n
  72. \n
  73. \n
  74. \n
  75. \n
  76. \n
  77. \n
  78. \n
  79. \n
  80. \n
  81. \n
  82. \n
  83. \n
  84. \n
  85. \n
  86. \n
  87. \n
  88. \n
  89. \n
  90. \n
  91. \n
  92. \n
  93. \n
  94. \n
  95. \n
  96. \n
  97. \n
  98. \n
  99. \n
  100. \n
  101. \n
  102. \n
  103. \n
  104. \n
  105. \n
  106. \n
  107. \n
  108. \n
  109. \n
  110. \n
  111. \n
  112. \n
  113. \n
  114. \n
  115. \n
  116. \n
  117. \n
  118. \n
  119. \n
  120. \n
  121. \n
  122. \n
  123. \n
  124. \n
  125. \n
  126. \n
  127. \n
  128. \n
  129. \n
  130. \n
  131. \n
  132. \n
  133. \n
  134. \n
  135. \n
  136. \n
  137. \n
  138. \n
  139. \n
  140. \n
  141. \n
  142. \n
  143. \n
  144. \n
  145. \n
  146. \n
  147. \n
  148. \n
  149. \n
  150. \n
  151. \n
  152. \n
  153. \n
  154. \n
  155. \n
  156. \n