• Nenhum resultado encontrado

aula 14 - Grafos (algoritmos de busca)

N/A
N/A
Protected

Academic year: 2021

Share "aula 14 - Grafos (algoritmos de busca)"

Copied!
42
0
0

Texto

(1)

Estrutura de Dados

13 – Grafos: Algoritmos

de Busca

(2)

Tópicos

• Percurso em Grafos

(3)

Percurso em Grafos

• A operação básica em grafos é o percurso

- Ou seja, visitar todos os vértices e arestas uma

única vez em alguma ordem;

• Uma possível dificuldade seria não terminar a

busca nunca, por causa de repetição

- Por isso marcamos os vértices já visitados.

• Existem dois algoritmos básicos

(4)

Busca em Largura (BFS)

• A busca em largura (Breadth-First-Search – BFS)

expande a exploração de um grafo em níveis

- A partir do vértice inicial, o nível explorado é o dos

vértices adjacentes;

- Após a exploração deste nível, passa-se à exploração

do vértice adjacente aos do nível anterior;

- Caso o grafo seja desconectado, ao fim da exploração

de um componente, passa-se ao próximo;

- O procedimento se repete até que todos os vértices

tenham sido explorados.

(5)

Busca em Largura (BFS)

• Uma estrutura de fila é utilizada para guiar os passos

da busca;

• Durante a exploração, um vértice é descoberto na

primeira vez em que é encontrado, quando é então

enfileirado

-

Representado pela cor cinza.

• Quando o vértice é retirado da fila, ele é considerado

visitado

-

Todos os vértices adjacentes a ele foram descobertos, ou

(6)

Busca em Largura (BFS)

1 5 9 3 7 2 6 8 4

(7)

Busca em Largura (BFS)

1 5 9 3 7 2 6 8 4

(8)

Busca em Largura (BFS)

1 5 9 3 7 2 6 8 4

Retira da fila e percorre todos

os vértices adjacentes,

inserindo-os na fila e pintando

de cinza.

(9)

Busca em Largura (BFS)

1 5 9 3 7 2 6 8 4

Após todos os vértices terem

sido percorridos, o vértice atual

é pintado de preto, que

significa que ele já foi

explorado/visitado.

(10)

Busca em Largura (BFS)

1 5 9 3 7 2 6 8 4

Retira o próximo da fila,

percorre seus vértices

(11)

Busca em Largura (BFS)

1 5 9 3 7 2 6 8 4

Retira o próximo da fila,

percorre seus vértices

(12)

Busca em Largura (BFS)

1 5 9 3 7 2 6 8 4

Retira o próximo da fila,

percorre seus vértices

(13)

Busca em Largura (BFS)

1 5 9 3 7 2 6 8 4

Retira o próximo da fila,

percorre seus vértices

(14)

Busca em Largura (BFS)

1 5 9 3 7 2 6 8 4

Retira o próximo da fila,

percorre seus vértices

(15)

Busca em Largura (BFS)

1 5 9 3 7 2 6 8 4

Retira o próximo da fila,

percorre seus vértices

(16)

Busca em Largura (BFS)

1 5 9 3 7 2 6 8 4

Retira o próximo da fila,

percorre seus vértices

(17)

Busca em Largura (BFS)

1 5 9 3 7 2 6 8 4

Retira o próximo da fila,

percorre seus vértices

(18)

Busca em Largura (BFS)

1 5 9 3 7 2 6 8 4

Retira o próximo da fila,

percorre seus vértices

(19)

Busca em Largura (BFS)

1 5 9 3 7 2 6 8 4

Retira o próximo da fila,

percorre seus vértices

(20)

Busca em Largura (BFS)

1 5 9 3 7 2 6 8 4

(21)

Busca em Largura (BFS)

• Existe uma relação entre o penúltimo e último

vértice descobertos

- O último foi descoberto a partir do penúltimo;

- Dizemos então que o penúltimo é pai/predecessor

do último;

• Se seguirmos a genealogia dos vértices,

obtemos o caminho de menor comprimento

entre o vértice inicial da busca e todos os outros

(22)

Busca em Largura - Código

• Para a implementação definiremos a cor do

vértice como (utiliza #define):

- BRANCO (0): significa que ele nunca foi percorrido

- CINZA (1): já foi percorrido uma vez

- PRETO (2): já foi explorado/visitado

• A função BFS() analisa a ordem de exploração

dos vértices para encontrar o menor caminho

entre dois vértices.

(23)

Busca em Largura - Código

(24)

Busca em Largura - Código

(25)

Busca em Largura - Código

• Função de criação de resultado: inicializa

variáveis

(26)

Busca em Largura - Código

(27)

Busca em Largura - Código

• Exemplo:

1 5 0 3 2 4 origem

(28)

Busca em Largura - Código

• Exemplo:

Fila: null Atual: x

• Após a execução da função de cria resultado – essa função inicializa a cor, a distância e o predecessor de todos os vértices do grafo. 0 1 2 3 4 5 6 Cor B B B B B B B Dist. 0 0 0 0 0 0 0

(29)

Busca em Largura - Código

• Exemplo:

Fila: 0->null Atual: x

• Insere na fila o vértice

origem e pinta ele de cinza (executando a função BFS) 0 1 2 3 4 5 6 Cor B B B B B B B C Dist. 0 0 0 0 0 0 0

(30)

Busca em Largura - Código

• Exemplo:

Fila: 1->2->3->null Atual: 0

• Enquanto a fila for diferente de vazia retira um vértice do início da fila. Verifica todos os vértices

adjacentes ao atual, insere-os na fila, pinta eles de

cinza, atualiza a distância e o seu predecessor. 0 1 2 3 4 5 6 Cor B B B B B B B C C C C Dist. 0 0 0 0 0 0 0 1 1 1

(31)

Busca em Largura - Código

• Exemplo:

Fila: 1->2->3->null Atual: 0

• Após ter passado por todos os vértices adjacentes pinta o vértice atual de preto,

que significa que ele já foi explorado/visitado. 0 1 2 3 4 5 6 Cor B B B B B B B C C C C P Dist. 0 0 0 0 0 0 0 1 1 1

(32)

Busca em Largura - Código

• Exemplo:

Fila: 2->3->null Atual: 0 1

• Repete o processo: - retira um vértice da fila,

torna-o o atual;

- verifica seus vértices

adjacentes e atualiza suas informações. 0 1 2 3 4 5 6 Cor B B B B B B B C C C C P Dist. 0 0 0 0 0 0 0 1 1 1

(33)

Busca em Largura - Código

• Exemplo:

Fila: 2->3->null Atual: 0 1

• Neste caso todos os

adjacentes de 1 já foram percorridos (estão cinzas), e com isso pinta o vértice de preto. 0 1 2 3 4 5 6 Cor B B B B B B B C C C C P P Dist. 0 0 0 0 0 0 0 1 1 1

(34)

Busca em Largura - Código

• Exemplo:

Fila: 3->4->5->null Atual: 0 1 2

• Repete o processo: - retira um vértice da fila,

torna-o o atual;

- verifica seus vértices

adjacentes e atualiza suas informações. 0 1 2 3 4 5 6 Cor B B B B B B B C C C C C C P P Dist. 0 0 0 0 0 0 0 1 1 1 2 2

(35)

Busca em Largura - Código

• Exemplo:

Fila: 3->4->5->null Atual: 0 1 2

• Após ter passado por todos os vértices adjacentes pinta o vértice atual de preto,

que significa que ele já foi explorado/visitado. 0 1 2 3 4 5 6 Cor B B B B B B B C C C C C C P P P Dist. 0 0 0 0 0 0 0 1 1 1 2 2

(36)

Busca em Largura - Código

• Exemplo:

Fila: 4->5->null Atual: 0 1 2 3

• Repete o processo:

- retira um vértice da fila, torna-o o atual;

- verifica seus vértices

adjacentes e atualiza suas informações.

Neste caso todos os adjacentes de 3 já foram 0 1 2 3 4 5 6 Cor B B B B B B B C C C C C C P P P P Dist. 0 0 0 0 0 0 0 1 1 1 2 2

(37)

Busca em Largura - Código

• Exemplo:

Fila: 5->null Atual: 0 1 2 3 4

• Repete o processo:

- retira um vértice da fila, torna-o o atual;

- verifica seus vértices

adjacentes e atualiza suas informações.

Neste caso todos os adjacentes de 4 já foram percorridos (estão cinzas), e

0 1 2 3 4 5 6 Cor B B B B B B B C C C C C C P P P P P Dist. 0 0 0 0 0 0 0 1 1 1 2 2

(38)

Busca em Largura - Código

• Exemplo:

Fila: 6->null

Atual: 0 1 2 3 4 5

• Repete o processo: - retira um vértice da fila,

torna-o o atual;

- verifica seus vértices

adjacentes e atualiza suas informações. 0 1 2 3 4 5 6 Cor B B B B B B B C C C C C C C P P P P P Dist. 0 0 0 0 0 0 0 1 1 1 2 2 3

(39)

Busca em Largura - Código

• Exemplo:

Fila: 6->null

Atual: 0 1 2 3 4 5

• Após ter passado por todos os vértices adjacentes pinta o vértice atual de preto,

que significa que ele já foi explorado/visitado. 0 1 2 3 4 5 6 Cor B B B B B B B C C C C C C C P P P P P P Dist. 0 0 0 0 0 0 0 1 1 1 2 2 3

(40)

Busca em Largura - Código

• Exemplo:

Fila: null

Atual: 0 1 2 3 4 5 6

• Repete o processo:

- retira um vértice da fila, torna-o o atual;

- verifica seus vértices

adjacentes e atualiza suas informações.

Neste caso todos os adjacentes de 6 já foram percorridos (estão cinzas), e

0 1 2 3 4 5 6 Cor B B B B B B B C C C C C C C P P P P P P P Dist. 0 0 0 0 0 0 0 1 1 1 2 2 3

(41)

Busca em Largura - Código

0 1 2 3 4 5 6 Cor B B B B B B B C C C C C C C P P P P P P P Dist. 0 0 0 0 0 0 0 0 1 1 1 2 2 3 Pred -1 -1 -1 -1 -1 -1 -1 -1 0 0 0 2 2 5

(42)

Exercícios de fixação

• Implementar um programa que realize a busca

em largura em um grafo (semipresencial 7).

O que falta?

• Implementar funções de fila

• Implementar função de inserção de aresta

• Implementar função para mostrar resultado

Referências

Documentos relacionados

Este artigo pretende analisar as práticas de itinerância dos aedos gregos a partir dos épicos de Homero, destacando a importância que tais movimentos tiveram para as suas récitas

O verso de II Samuel 7.10 nos mostra que este é o ano em que o Eterno preparará um lugar para seu povo Israel, e isso está relacionado não somente com a herança física como também

Mas existe grande incerteza sobre quem detém esses direitos em certas áreas do Brasil rural.. Esta é a posição do Brasil em relação à segurança de direitos de propriedade de

This infographic is part of a project that analyzes property rights in rural areas of Brazil and maps out public policy pathways in order to guarantee them for the benefit of

Os valores de um quadro de segurança humana são, em primeiro lugar, uni- versais e aplicam-se a todos os tipos de regime, pelo que a nato assume como sua uma

23.1. Aquele que, convocado dentro do prazo de validade de sua proposta, não assinar o contrato ou ata de registro de preços, deixar de entregar documentação exigida no

Entretando, para assegurar a sustentabilidade da bacia outras ações reguladores podem ser desenvolvidas como: realizar os estudos aqui feitos com outros níveis

Após consulta da Confederação ao Departamento de Policia Federal, o mesmo foi direto ao ponto e disse que “de acordo com o Parecer da DELP/CGCSP o entendimento é de que a medida