Caminhamento em Grafos Autoria: Celso C. Ribeiro e Caroline T. Rocha Adaptação: Maria Claudia Silva Boeres
Caminhamento em Grafos Caminhar/percorrer um grafo: visitar todos os nós e arestas BUSCA EM PROFUNDIDADE Enquanto for possível, aprofundar-se no grafo. Quando não for mais possível, recuar. 7º 6º 8 9 1 5 4 2 6 3 7 10 1º 2 8º 3 10 1 10º 9 4 3º 6 2º 4º 7 5 9º 8 5º Algoritmos em Grafos
Caminhamento em Grafos 1 4 6 5 7 8 3 2 10 9 7º 6º 8 9 1 5 4 2 6 3 7 10 1º 2 8º 3 10 1 10º 9 4 3º 6 2º 4º 7 5 9º 8 5º Algoritmos em Grafos
Caminhamento em Grafos A ordem em que os nós e arestas são visitados depende: do nó inicial da ordem em que os nós e as arestas aparecem na estrutura de dados Algoritmos em Grafos
Caminhamento em Grafos Algoritmo recursivo para busca a partir de um nó Procedimento PROF(nó v) visitado(v) sim Para cada nó w adjacente a v faça Se visitado(w) = não então PROF(w) fim-para Fim Algoritmos em Grafos
Caminhamento em Grafos Exemplo: 1 D A E B C F G H A A B C D E F G H X X 2 7 B C X X D E F G 3 X 5 6 8 X X H 4 X não visitado visitado Algoritmos em Grafos
Caminhamento em Grafos Exemplo: A B E F D H C G 1 D A E B C F G H A 2 7 B C D E F G 3 5 6 8 H 4 Árvore de busca em profundidade (pilha) Algoritmos em Grafos
Caminhamento em Grafos Algoritmo de busca em profundidade Procedimento BUSCA-PROF Para i = 1,...,n faça visitado(i) não fim-para Se visitado(i) = não então PROF(i) Fim Algoritmos em Grafos
Caminhamento em Grafos Exemplo: 7 1 11 8 2 3 1 7 5 6 4 11 9 14 12 10 13 1 2 11 6 8 7 8 2 3 10 14 9 4 9 12 6 3 10 5 5 13 4 13 12 14 Algoritmos em Grafos
Caminhamento em Grafos Aplicações de busca em profundidade, grafo G=(V,E) Algoritmos em Grafos
Caminhamento em Grafos Algoritmo para encontrar as componentes conexas Procedimento COMPONENTES-CONEXAS Para i = 1,...,n faça visitado(i) 0 fim-para componente 0 Se visitado(i) = 0 então componente componente + 1 PROF(i, componente) fim-se Fim Algoritmos em Grafos
Caminhamento em Grafos Algoritmo para encontrar as componentes conexas Procedimento PROF(v, marca) visitado(v) marca Para cada nó w adjacente a v faça Se visitado(w) = 0 então PROF(w, marca) fim-se fim-para Fim Algoritmos em Grafos
Caminhamento em Grafos BUSCA EM AMPLITUDE Enquanto for possível, examinar todos os nós à mesma distância do nó inicial. Quando não for mais possível, aprofundar. 5 6 8 9 1 5 4 2 6 3 7 10 1 2 9 3 10 1 2 9 4 7 6 4 10 7 5 3 8 8 Algoritmos em Grafos
Caminhamento em Grafos D A E B C F G Exemplo: Árvore de busca em profundidade (pilha) Árvore de busca em amplitude (fila) B C A F G D E D E A F G C B Algoritmos em Grafos
Caminhamento em Grafos Algoritmo de busca em amplitude Procedimento BUSCA-AMPL(v) visitado(v) sim Colocar v em uma fila Enquanto fila não vazia faça w retirar o elemento da frente da fila Para cada vértice i adjacente a w faça Se visitado(i) = não então visitado(i) sim Colocar i no final da fila fim-se fim-para fim-enquanto Fim Algoritmos em Grafos
Caminhamento em Grafos Exemplo: A B C D E F G H 1 D A E B C F G H A 2 3 B C D E F G 4 5 6 7 H 8 Fila w = G H F B D E A C não visitado visitado F G H B C A E D E C D B G F D F E C D E Algoritmos em Grafos
Caminhamento em Grafos Exemplo: D A E B C F G H 1 D A E B C F G H A 2 3 B C D E F G 4 5 6 7 H 8 Árvore de busca em amplitude (fila) Algoritmos em Grafos
Caminhamento em Grafos Exemplo: 1 5 6 8 2 5 4 RCM 1 7 3 4 3 7 1 7 5 4 2 3 8 6 2 6 8 Árvore de busca em amplitude (fila) Algoritmos em Grafos