Você está na página 1de 80

Grafos:

Busca em Largura
Centro de Inform-ca Universidade Federal de Pernambuco Sistemas de Informao Vinicius Cardoso Garcia vcg@cin.ufpe.br

2011 Vinicius Cardoso Garcia

Introduo
Existem duas maneiras bsicas de percorrer um grafo:
Busca em profundidade Busca em largura

Algoritmos e Estrutura de Dados Grafos: Busca em Largura 2011 Vinicius Cardoso Garcia

Busca em Largura
A busca em largura assim chamada porque expande a fronteira entre vr-ces descobertos e no descobertos uniformemente
Como se fossem crculos concntricos

O algoritmo de busca em largura usado em muitos algoritmos de grafos


rvore geradora mnima Caminho mais curto (Dijkstra)
Algoritmos e Estrutura de Dados Grafos: Busca em Largura 2011 Vinicius Cardoso Garcia

Busca em Largura
Dado um vr-ce de origem, uma busca em largura descobre todos os vr-ces a uma distncia x do vr-ce de origem, antes de descobrir qualquer vr-ce a x+1 Vr-ces no visitados como BRANCOS Vr-ces visitados so coloridos como CINZAS Vr-ces cujos adjacentes j foram visitados so coloridos como PRETOS
Algoritmos e Estrutura de Dados Grafos: Busca em Largura 2011 Vinicius Cardoso Garcia

Algoritmo
Marca todos os ns como BRANCOS Percorre todos os ns BRANCOS em largura
Mais detalhes deste passo a seguir

Algoritmos e Estrutura de Dados Grafos: Busca em Largura 2011 Vinicius Cardoso Garcia

Algoritmo buscaEmLargura(g, v)
Marca o vr-ce de origem v como CINZA Cria uma la e insere v Enquanto a la no es-ver vazia
u = dequeue(la) Obtm os adjacentes de u Para cada adjacente[i] de u
Se adjacente[i].cor == BRANCO
Marca adjacente[i] como CINZA Enqueue(la, adjacente[i])

Marca u como PRETO


Algoritmos e Estrutura de Dados Grafos: Busca em Largura 2011 Vinicius Cardoso Garcia

Exemplo
4

8 1 3 0 6 9 2 7

10
Algoritmos e Estrutura de Dados Grafos: Busca em Largura 2011 Vinicius Cardoso Garcia

1. Marcar todos os vrFces como no visitados

8 1 3 0 6 9 2 7

10
Algoritmos e Estrutura de Dados Grafos: Busca em Largura 2011 Vinicius Cardoso Garcia

2. Percorrer os vrFces no visitados em largura

8 1 3 0 6 9 2 7

10
Algoritmos e Estrutura de Dados Grafos: Busca em Largura 2011 Vinicius Cardoso Garcia

Visitar o 1 vrFce no visitado: VrFce 0

8 1 3 0 6 9 2 7

10
Algoritmos e Estrutura de Dados Grafos: Busca em Largura 2011 Vinicius Cardoso Garcia

10

Inserir o vrFce 0 na la
0 4

8 1 3 0 6 9 2 7

10
Algoritmos e Estrutura de Dados Grafos: Busca em Largura 2011 Vinicius Cardoso Garcia

11

Enquanto a la no esFver vazia...


u = dequeue(la) Obtm os adjacentes de u Para cada adjacente[i] de u
Se adjacente[i].cor == BRANCO
Marca adjacente[i] como CINZA enqueue(la, adjacente[i])

Marca u como PRETO

Algoritmos e Estrutura de Dados Grafos: Busca em Largura 2011 Vinicius Cardoso Garcia

12

u = dequeue(la)
4

8 1 3 0 6 9 2 7

10
Algoritmos e Estrutura de Dados Grafos: Busca em Largura 2011 Vinicius Cardoso Garcia

13

Obtm os adjacentes de u
4

8 1 3 0 6 9 2 7

10
Algoritmos e Estrutura de Dados Grafos: Busca em Largura 2011 Vinicius Cardoso Garcia

14

Marca os adjacentes no visitados de cinza...

8 1 3 0 6 9 2 7

10
Algoritmos e Estrutura de Dados Grafos: Busca em Largura 2011 Vinicius Cardoso Garcia

15

Insere os adjacentes na la...


1 2 3 4

8 1 3 0 6 9 2 7

10
Algoritmos e Estrutura de Dados Grafos: Busca em Largura 2011 Vinicius Cardoso Garcia

16

Marca u como PRETO


1 2 3 4

8 1 3 0 6 9 2 7

10
Algoritmos e Estrutura de Dados Grafos: Busca em Largura 2011 Vinicius Cardoso Garcia

17

u = dequeue(la)
2 3 4

8 1 3 0 6 9 2 7

10
Algoritmos e Estrutura de Dados Grafos: Busca em Largura 2011 Vinicius Cardoso Garcia

18

Obtm os adjacentes de u
2 3 4

8 1 3 0 6 9 2 7

10
Algoritmos e Estrutura de Dados Grafos: Busca em Largura 2011 Vinicius Cardoso Garcia

19

Marca os adjacentes como CINZA


2 3 4

8 1 3 0 6 9 2 7

10
Algoritmos e Estrutura de Dados Grafos: Busca em Largura 2011 Vinicius Cardoso Garcia

20

Inserir os adjacentes na la
2 3 4 5 4

8 1 3 0 6 9 2 7

10
Algoritmos e Estrutura de Dados Grafos: Busca em Largura 2011 Vinicius Cardoso Garcia

21

Pintar u de PRETO
2 3 4 5 4

8 1 3 0 6 9 2 7

10
Algoritmos e Estrutura de Dados Grafos: Busca em Largura 2011 Vinicius Cardoso Garcia

22

u = dequeue(la)
3 4 5 4

8 1 3 0 6 9 2 7

10
Algoritmos e Estrutura de Dados Grafos: Busca em Largura 2011 Vinicius Cardoso Garcia

23

Obtm os adjacentes de u
3 4 5 4

8 1 3 0 6 9 2 7

10
Algoritmos e Estrutura de Dados Grafos: Busca em Largura 2011 Vinicius Cardoso Garcia

24

Marca os adjacentes como CINZA


3 4 5 4

8 1 3 0 6 9 2 7

10
Algoritmos e Estrutura de Dados Grafos: Busca em Largura 2011 Vinicius Cardoso Garcia

25

Inserir os adjacentes na la
3 4 5 6 7 4

8 1 3 0 6 9 2 7

10
Algoritmos e Estrutura de Dados Grafos: Busca em Largura 2011 Vinicius Cardoso Garcia

26

Pintar u de PRETO
3 4 5 6 7 4

8 1 3 0 6 9 2 7

10
Algoritmos e Estrutura de Dados Grafos: Busca em Largura 2011 Vinicius Cardoso Garcia

27

u = dequeue(la)
4 5 6 7 4

8 1 3 0 6 9 2 7

10
Algoritmos e Estrutura de Dados Grafos: Busca em Largura 2011 Vinicius Cardoso Garcia

28

Obtm os adjacentes de u
4 5 6 7 4

8 1 3 0 6 9 2 7

10
Algoritmos e Estrutura de Dados Grafos: Busca em Largura 2011 Vinicius Cardoso Garcia

29

Marca os adjacentes como CINZA


4 5 6 7 4

8 1 3 0 6 9 2 7

10
Algoritmos e Estrutura de Dados Grafos: Busca em Largura 2011 Vinicius Cardoso Garcia

30

Inserir os adjacentes na la
4 5 6 7 9 4

8 1 3 0 6 9 2 7

10
Algoritmos e Estrutura de Dados Grafos: Busca em Largura 2011 Vinicius Cardoso Garcia

31

Pintar u de PRETO
4 5 6 7 9 4

8 1 3 0 6 9 2 7

10
Algoritmos e Estrutura de Dados Grafos: Busca em Largura 2011 Vinicius Cardoso Garcia

32

u = dequeue(la)
5 6 7 9 4

8 1 3 0 6 9 2 7

10
Algoritmos e Estrutura de Dados Grafos: Busca em Largura 2011 Vinicius Cardoso Garcia

33

Obtm os adjacentes de u
5 6 7 9 4

8 1 3 0 6 9 2 7

10
Algoritmos e Estrutura de Dados Grafos: Busca em Largura 2011 Vinicius Cardoso Garcia

34

Marca os adjacentes como CINZA


5 6 7 9 4

8 1 3 0 6 9 2 7

10
Algoritmos e Estrutura de Dados Grafos: Busca em Largura 2011 Vinicius Cardoso Garcia

35

Inserir os adjacentes na la
5 6 7 9 8 4

8 1 3 0 6 9 2 7

10
Algoritmos e Estrutura de Dados Grafos: Busca em Largura 2011 Vinicius Cardoso Garcia

36

Pintar u de PRETO
5 6 7 9 8 4

8 1 3 0 6 9 2 7

10
Algoritmos e Estrutura de Dados Grafos: Busca em Largura 2011 Vinicius Cardoso Garcia

37

u = dequeue(la)
6 7 9 8 4

8 1 3 0 6 9 2 7

10
Algoritmos e Estrutura de Dados Grafos: Busca em Largura 2011 Vinicius Cardoso Garcia

38

O VrFce 5 no possui adjacentes


6 7 9 8 4

8 1 3 0 6 9 2 7

10
Algoritmos e Estrutura de Dados Grafos: Busca em Largura 2011 Vinicius Cardoso Garcia

39

Pintar u de PRETO
6 7 9 8 4

8 1 3 0 6 9 2 7

10
Algoritmos e Estrutura de Dados Grafos: Busca em Largura 2011 Vinicius Cardoso Garcia

40

u = dequeue(la)
7 9 8 4

8 1 3 0 6 9 2 7

10
Algoritmos e Estrutura de Dados Grafos: Busca em Largura 2011 Vinicius Cardoso Garcia

41

O VrFce 6 no possui adjacentes


7 9 8 4

8 1 3 0 6 9 2 7

10
Algoritmos e Estrutura de Dados Grafos: Busca em Largura 2011 Vinicius Cardoso Garcia

42

Pintar u de PRETO
7 9 8 4

8 1 3 0 6 9 2 7

10
Algoritmos e Estrutura de Dados Grafos: Busca em Largura 2011 Vinicius Cardoso Garcia

43

u = dequeue(la)
9 8 4

8 1 3 0 6 9 2 7

10
Algoritmos e Estrutura de Dados Grafos: Busca em Largura 2011 Vinicius Cardoso Garcia

44

Obtm os adjacentes de u
9 8 4

8 1 3 0 6 9 2 7

10
Algoritmos e Estrutura de Dados Grafos: Busca em Largura 2011 Vinicius Cardoso Garcia

45

Marca os adjacentes no visitados de u como CINZA


9 8 4

8 1 3 0 6 9 2 7

10
Algoritmos e Estrutura de Dados Grafos: Busca em Largura 2011 Vinicius Cardoso Garcia

46

Inserir os adjacentes no visitados de u na la


9 8 10 4

8 1 3 0 6 9 2 7

10
Algoritmos e Estrutura de Dados Grafos: Busca em Largura 2011 Vinicius Cardoso Garcia

47

Pintar u de PRETO
9 8 10 4

8 1 3 0 6 9 2 7

10
Algoritmos e Estrutura de Dados Grafos: Busca em Largura 2011 Vinicius Cardoso Garcia

48

u = dequeue(la)
8 10 4

8 1 3 0 6 9 2 7

10
Algoritmos e Estrutura de Dados Grafos: Busca em Largura 2011 Vinicius Cardoso Garcia

49

Como u no tem adjacentes no visitados, pintar de PRETO


8 10 4

8 1 3 0 6 9 2 7

10
Algoritmos e Estrutura de Dados Grafos: Busca em Largura 2011 Vinicius Cardoso Garcia

50

u = dequeue(la)
10 4

8 1 3 0 6 9 2 7

10
Algoritmos e Estrutura de Dados Grafos: Busca em Largura 2011 Vinicius Cardoso Garcia

51

Como u no tem adjacentes no visitados, pintar de PRETO


10 4

8 1 3 0 6 9 2 7

10
Algoritmos e Estrutura de Dados Grafos: Busca em Largura 2011 Vinicius Cardoso Garcia

52

u = dequeue(la)

8 1 3 0 6 9 2 7

10

10
Algoritmos e Estrutura de Dados Grafos: Busca em Largura 2011 Vinicius Cardoso Garcia

53

Como u no tem adjacentes no visitados, pintar de PRETO

8 1 3 0 6 9 2 7

10

10
Algoritmos e Estrutura de Dados Grafos: Busca em Largura 2011 Vinicius Cardoso Garcia

54

Percursos Pr e Ps Ordem
A busca em largura pode ser usada para a realizao de operaes nos vr-ces de um grafo Para isto, podem ser considerados dois -pos de percurso:
Percurso pr-ordem Percurso ps-ordem

Algoritmos e Estrutura de Dados Grafos: Busca em Largura 2011 Vinicius Cardoso Garcia

55

Percurso Pr-Ordem
No percurso pr-ordem as operaes acontecem no momento em que o vr-ce marcado como CINZA No percurso ps-ordem, as operaes acontecem no momento em que o vr-ce marcado como PRETO

Algoritmos e Estrutura de Dados Grafos: Busca em Largura 2011 Vinicius Cardoso Garcia

56

Percursos pr e ps ordem na busca em largura

8 1 3 0 6 9 2 7

10
Algoritmos e Estrutura de Dados Grafos: Busca em Largura 2011 Vinicius Cardoso Garcia

57

Pr-Ordem: 0 Ps-Ordem:

8 1 3 0 6 9 2 7

10
Algoritmos e Estrutura de Dados Grafos: Busca em Largura 2011 Vinicius Cardoso Garcia

58

Pr-Ordem: 0, 1 Ps-Ordem:

8 1 3 0 6 9 2 7

10
Algoritmos e Estrutura de Dados Grafos: Busca em Largura 2011 Vinicius Cardoso Garcia

59

Pr-Ordem: 0, 1, 2 Ps-Ordem:

8 1 3 0 6 9 2 7

10
Algoritmos e Estrutura de Dados Grafos: Busca em Largura 2011 Vinicius Cardoso Garcia

60

Pr-Ordem: 0, 1, 2, 3 Ps-Ordem:

8 1 3 0 6 9 2 7

10
Algoritmos e Estrutura de Dados Grafos: Busca em Largura 2011 Vinicius Cardoso Garcia

61

Pr-Ordem: 0, 1, 2, 3 Ps-Ordem: 0

8 1 3 0 6 9 2 7

10
Algoritmos e Estrutura de Dados Grafos: Busca em Largura 2011 Vinicius Cardoso Garcia

62

Pr-Ordem: 0, 1, 2, 3, 4 Ps-Ordem: 0

8 1 3 0 6 9 2 7

10
Algoritmos e Estrutura de Dados Grafos: Busca em Largura 2011 Vinicius Cardoso Garcia

63

Pr-Ordem: 0, 1, 2, 3, 4, 5 Ps-Ordem: 0

8 1 3 0 6 9 2 7

10
Algoritmos e Estrutura de Dados Grafos: Busca em Largura 2011 Vinicius Cardoso Garcia

64

Pr-Ordem: 0, 1, 2, 3, 4, 5 Ps-Ordem: 0, 1

8 1 3 0 6 9 2 7

10
Algoritmos e Estrutura de Dados Grafos: Busca em Largura 2011 Vinicius Cardoso Garcia

65

Pr-Ordem: 0, 1, 2, 3, 4, 5, 6 Ps-Ordem: 0, 1

8 1 3 0 6 9 2 7

10
Algoritmos e Estrutura de Dados Grafos: Busca em Largura 2011 Vinicius Cardoso Garcia

66

Pr-Ordem: 0, 1, 2, 3, 4, 5, 6, 7 Ps-Ordem: 0, 1

8 1 3 0 6 9 2 7

10
Algoritmos e Estrutura de Dados Grafos: Busca em Largura 2011 Vinicius Cardoso Garcia

67

Pr-Ordem: 0, 1, 2, 3, 4, 5, 6, 7 Ps-Ordem: 0, 1, 2

8 1 3 0 6 9 2 7

10
Algoritmos e Estrutura de Dados Grafos: Busca em Largura 2011 Vinicius Cardoso Garcia

68

Pr-Ordem: 0, 1, 2, 3, 4, 5, 6, 7, 9 Ps-Ordem: 0, 1, 2

8 1 3 0 6 9 2 7

10
Algoritmos e Estrutura de Dados Grafos: Busca em Largura 2011 Vinicius Cardoso Garcia

69

Pr-Ordem: 0, 1, 2, 3, 4, 5, 6, 7, 9 Ps-Ordem: 0, 1, 2, 3

8 1 3 0 6 9 2 7

10
Algoritmos e Estrutura de Dados Grafos: Busca em Largura 2011 Vinicius Cardoso Garcia

70

Pr-Ordem: 0, 1, 2, 3, 4, 5, 6, 7, 9, 8 Ps-Ordem: 0, 1, 2, 3

8 1 3 0 6 9 2 7

10
Algoritmos e Estrutura de Dados Grafos: Busca em Largura 2011 Vinicius Cardoso Garcia

71

Pr-Ordem: 0, 1, 2, 3, 4, 5, 6, 7, 9, 8 Ps-Ordem: 0, 1, 2, 3, 4

8 1 3 0 6 9 2 7

10
Algoritmos e Estrutura de Dados Grafos: Busca em Largura 2011 Vinicius Cardoso Garcia

72

Pr-Ordem: 0, 1, 2, 3, 4, 5, 6, 7, 9, 8 Ps-Ordem: 0, 1, 2, 3, 4, 5

8 1 3 0 6 9 2 7

10
Algoritmos e Estrutura de Dados Grafos: Busca em Largura 2011 Vinicius Cardoso Garcia

73

Pr-Ordem: 0, 1, 2, 3, 4, 5, 6, 7, 9, 8 Ps-Ordem: 0, 1, 2, 3, 4, 5, 6

8 1 3 0 6 9 2 7

10
Algoritmos e Estrutura de Dados Grafos: Busca em Largura 2011 Vinicius Cardoso Garcia

74

Pr-Ordem: 0, 1, 2, 3, 4, 5, 6, 7, 9, 8, 10 Ps-Ordem: 0, 1, 2, 3, 4, 5, 6

8 1 3 0 6 9 2 7

10
Algoritmos e Estrutura de Dados Grafos: Busca em Largura 2011 Vinicius Cardoso Garcia

75

Pr-Ordem: 0, 1, 2, 3, 4, 5, 6, 7, 9, 8, 10 Ps-Ordem: 0, 1, 2, 3, 4, 5, 6, 7

8 1 3 0 6 9 2 7

10
Algoritmos e Estrutura de Dados Grafos: Busca em Largura 2011 Vinicius Cardoso Garcia

76

Pr-Ordem: 0, 1, 2, 3, 4, 5, 6, 7, 9, 8, 10 Ps-Ordem: 0, 1, 2, 3, 4, 5, 6, 7, 9

8 1 3 0 6 9 2 7

10
Algoritmos e Estrutura de Dados Grafos: Busca em Largura 2011 Vinicius Cardoso Garcia

77

Pr-Ordem: 0, 1, 2, 3, 4, 5, 6, 7, 9, 8, 10 Ps-Ordem: 0, 1, 2, 3, 4, 5, 6, 7, 9, 8

8 1 3 0 6 9 2 7

10
Algoritmos e Estrutura de Dados Grafos: Busca em Largura 2011 Vinicius Cardoso Garcia

78

Pr-Ordem: 0, 1, 2, 3, 4, 5, 6, 7, 9, 8, 10 Ps-Ordem: 0, 1, 2, 3, 4, 5, 6, 7, 9, 8, 10

8 1 3 0 6 9 2 7

10
Algoritmos e Estrutura de Dados Grafos: Busca em Largura 2011 Vinicius Cardoso Garcia

79

AFvidades Complementares
Leitura do captulo 22 do livro Cormen Implementar a busca em largura para grafos, incluindo a impresso d grafo em pr e ps ordem

Algoritmos e Estrutura de Dados Grafos: Busca em Largura 2011 Vinicius Cardoso Garcia

80