274
MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery [email protected] Universidade Estadual de Campinas 1º semestre/2017

MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery [email protected] Universidade Estadual de

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

Page 1: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

MC-202 — Unidade 20Percurso de Grafos

Rafael C. S. [email protected]

Universidade Estadual de Campinas

1º semestre/2017

Page 2: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Caminhos em Grafos

0

1

2 3

45

6

7 8

9

Um caminho de s para t em um grafo é:

• Uma sequência sem repetição de vértices vizinhos• Começando em s e terminado em t

Por exemplo:• 0, 1, 6, 7, 2, 3, 8 é um caminho de 0 para 8• 0, 5, 8 não é um caminho de 0 para 8• 0, 1, 2, 7, 6, 1, 2, 3, 8 não é um caminho de 0 para 8

2

Page 3: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Caminhos em Grafos

0

1

2 3

45

6

7 8

9

Um caminho de s para t em um grafo é:• Uma sequência sem repetição de vértices vizinhos

• Começando em s e terminado em t

Por exemplo:• 0, 1, 6, 7, 2, 3, 8 é um caminho de 0 para 8• 0, 5, 8 não é um caminho de 0 para 8• 0, 1, 2, 7, 6, 1, 2, 3, 8 não é um caminho de 0 para 8

2

Page 4: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Caminhos em Grafos

0

1

2 3

45

6

7 8

9

Um caminho de s para t em um grafo é:• Uma sequência sem repetição de vértices vizinhos• Começando em s e terminado em t

Por exemplo:• 0, 1, 6, 7, 2, 3, 8 é um caminho de 0 para 8• 0, 5, 8 não é um caminho de 0 para 8• 0, 1, 2, 7, 6, 1, 2, 3, 8 não é um caminho de 0 para 8

2

Page 5: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Caminhos em Grafos

0

1

2 3

45

6

7 8

9

Um caminho de s para t em um grafo é:• Uma sequência sem repetição de vértices vizinhos• Começando em s e terminado em t

Por exemplo:

• 0, 1, 6, 7, 2, 3, 8 é um caminho de 0 para 8• 0, 5, 8 não é um caminho de 0 para 8• 0, 1, 2, 7, 6, 1, 2, 3, 8 não é um caminho de 0 para 8

2

Page 6: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Caminhos em Grafos

0

1

2 3

45

6

7 8

9

Um caminho de s para t em um grafo é:• Uma sequência sem repetição de vértices vizinhos• Começando em s e terminado em t

Por exemplo:• 0, 1, 6, 7, 2, 3, 8 é um caminho de 0 para 8

• 0, 5, 8 não é um caminho de 0 para 8• 0, 1, 2, 7, 6, 1, 2, 3, 8 não é um caminho de 0 para 8

2

Page 7: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Caminhos em Grafos

0

1

2 3

45

6

7 8

9

Um caminho de s para t em um grafo é:• Uma sequência sem repetição de vértices vizinhos• Começando em s e terminado em t

Por exemplo:• 0, 1, 6, 7, 2, 3, 8 é um caminho de 0 para 8• 0, 5, 8 não é um caminho de 0 para 8

• 0, 1, 2, 7, 6, 1, 2, 3, 8 não é um caminho de 0 para 8

2

Page 8: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Caminhos em Grafos

0

1

2 3

45

6

7 8

9

Um caminho de s para t em um grafo é:• Uma sequência sem repetição de vértices vizinhos• Começando em s e terminado em t

Por exemplo:• 0, 1, 6, 7, 2, 3, 8 é um caminho de 0 para 8• 0, 5, 8 não é um caminho de 0 para 8• 0, 1, 2, 7, 6, 1, 2, 3, 8 não é um caminho de 0 para 8

2

Page 9: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Caminhos em Grafos0

1

2 3

45

6

7 8

9

Formalmente, um caminho de s para t em um grafo é:

• Uma sequência de vértice v0, v1, . . . , vk onde• v0 = s e vk = t

• {vi, vi+1} é uma aresta para todo 0 ≤ i ≤ k − 1• vi ̸= vj para todo 0 ≤ i < j ≤ k

k é o comprimento do caminho• k = 0 se e somente se s = t

3

Page 10: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Caminhos em Grafos0

1

2 3

45

6

7 8

9

Formalmente, um caminho de s para t em um grafo é:• Uma sequência de vértice v0, v1, . . . , vk onde

• v0 = s e vk = t

• {vi, vi+1} é uma aresta para todo 0 ≤ i ≤ k − 1• vi ̸= vj para todo 0 ≤ i < j ≤ k

k é o comprimento do caminho• k = 0 se e somente se s = t

3

Page 11: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Caminhos em Grafos0

1

2 3

45

6

7 8

9

Formalmente, um caminho de s para t em um grafo é:• Uma sequência de vértice v0, v1, . . . , vk onde• v0 = s e vk = t

• {vi, vi+1} é uma aresta para todo 0 ≤ i ≤ k − 1• vi ̸= vj para todo 0 ≤ i < j ≤ k

k é o comprimento do caminho• k = 0 se e somente se s = t

3

Page 12: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Caminhos em Grafos0

1

2 3

45

6

7 8

9

Formalmente, um caminho de s para t em um grafo é:• Uma sequência de vértice v0, v1, . . . , vk onde• v0 = s e vk = t

• {vi, vi+1} é uma aresta para todo 0 ≤ i ≤ k − 1

• vi ̸= vj para todo 0 ≤ i < j ≤ k

k é o comprimento do caminho• k = 0 se e somente se s = t

3

Page 13: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Caminhos em Grafos0

1

2 3

45

6

7 8

9

Formalmente, um caminho de s para t em um grafo é:• Uma sequência de vértice v0, v1, . . . , vk onde• v0 = s e vk = t

• {vi, vi+1} é uma aresta para todo 0 ≤ i ≤ k − 1• vi ̸= vj para todo 0 ≤ i < j ≤ k

k é o comprimento do caminho• k = 0 se e somente se s = t

3

Page 14: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Caminhos em Grafos0

1

2 3

45

6

7 8

9

Formalmente, um caminho de s para t em um grafo é:• Uma sequência de vértice v0, v1, . . . , vk onde• v0 = s e vk = t

• {vi, vi+1} é uma aresta para todo 0 ≤ i ≤ k − 1• vi ̸= vj para todo 0 ≤ i < j ≤ k

k é o comprimento do caminho

• k = 0 se e somente se s = t

3

Page 15: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Caminhos em Grafos0

1

2 3

45

6

7 8

9

Formalmente, um caminho de s para t em um grafo é:• Uma sequência de vértice v0, v1, . . . , vk onde• v0 = s e vk = t

• {vi, vi+1} é uma aresta para todo 0 ≤ i ≤ k − 1• vi ̸= vj para todo 0 ≤ i < j ≤ k

k é o comprimento do caminho• k = 0 se e somente se s = t

3

Page 16: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Componentes ConexasUm grafo pode ter várias “partes”

0

1

2 3

45

6

7 8

9

10

11

12

13

14

15

Chamamos essas partes de Componentes Conexas• Um par de vértices está na mesma componente se e

somente se existe caminho entre eles

– Não há caminho entre vértices de componentes distintas

• Um grafo conexo tem apenas uma componente conexa

4

Page 17: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Componentes ConexasUm grafo pode ter várias “partes”

0

1

2 3

45

6

7 8

9

10

11

12

13

14

15

Chamamos essas partes de Componentes Conexas• Um par de vértices está na mesma componente se e

somente se existe caminho entre eles

– Não há caminho entre vértices de componentes distintas

• Um grafo conexo tem apenas uma componente conexa

4

Page 18: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Componentes ConexasUm grafo pode ter várias “partes”

0

1

2 3

45

6

7 8

9

10

11

12

13

14

15

Chamamos essas partes de Componentes Conexas• Um par de vértices está na mesma componente se e

somente se existe caminho entre eles

– Não há caminho entre vértices de componentes distintas

• Um grafo conexo tem apenas uma componente conexa

4

Page 19: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Componentes ConexasUm grafo pode ter várias “partes”

0

1

2 3

45

6

7 8

9

10

11

12

13

14

15

Chamamos essas partes de Componentes Conexas• Um par de vértices está na mesma componente se e

somente se existe caminho entre eles

– Não há caminho entre vértices de componentes distintas

• Um grafo conexo tem apenas uma componente conexa

4

Page 20: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Componentes ConexasUm grafo pode ter várias “partes”

0

1

2 3

45

6

7 8

9

10

11

12

13

14

15

Chamamos essas partes de Componentes Conexas• Um par de vértices está na mesma componente se e

somente se existe caminho entre eles

– Não há caminho entre vértices de componentes distintas

• Um grafo conexo tem apenas uma componente conexa

4

Page 21: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Componentes ConexasUm grafo pode ter várias “partes”

0

1

2 3

45

6

7 8

9

10

11

12

13

14

15

Chamamos essas partes de Componentes Conexas• Um par de vértices está na mesma componente se e

somente se existe caminho entre eles

– Não há caminho entre vértices de componentes distintas

• Um grafo conexo tem apenas uma componente conexa

4

Page 22: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Componentes ConexasUm grafo pode ter várias “partes”

0

1

2 3

45

6

7 8

9

10

11

12

13

14

15

Chamamos essas partes de Componentes Conexas

• Um par de vértices está na mesma componente se esomente se existe caminho entre eles

– Não há caminho entre vértices de componentes distintas

• Um grafo conexo tem apenas uma componente conexa

4

Page 23: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Componentes ConexasUm grafo pode ter várias “partes”

0

1

2 3

45

6

7 8

9

10

11

12

13

14

15

Chamamos essas partes de Componentes Conexas• Um par de vértices está na mesma componente se e

somente se existe caminho entre eles

– Não há caminho entre vértices de componentes distintas

• Um grafo conexo tem apenas uma componente conexa

4

Page 24: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Componentes ConexasUm grafo pode ter várias “partes”

0

1

2 3

45

6

7 8

9

10

11

12

13

14

15

Chamamos essas partes de Componentes Conexas• Um par de vértices está na mesma componente se e

somente se existe caminho entre eles– Não há caminho entre vértices de componentes distintas

• Um grafo conexo tem apenas uma componente conexa

4

Page 25: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Componentes ConexasUm grafo pode ter várias “partes”

0

1

2 3

45

6

7 8

9

10

11

12

13

14

15

Chamamos essas partes de Componentes Conexas• Um par de vértices está na mesma componente se e

somente se existe caminho entre eles– Não há caminho entre vértices de componentes distintas

• Um grafo conexo tem apenas uma componente conexa4

Page 26: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Existe caminho entre s e t?Queremos saber se s e t estão na mesma componente conexa

Se estiverem, existe algum caminho de s até t

s v1 v2 vk−1 t· · ·

Se existe caminho e s ̸= t, existe um segundo vértice v1

• E v1 é vizinho de s

• Então, ou v1 = t, ou existe um terceiro vértice v2

– E v2 é vizinho de v1

• E assim por diante...

A dificuldade é acertar qual vizinho v1 de s devemos usar...• Solução: testar todos!

5

Page 27: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Existe caminho entre s e t?Queremos saber se s e t estão na mesma componente conexa

Se estiverem, existe algum caminho de s até t

s v1 v2 vk−1 t· · ·

Se existe caminho e s ̸= t, existe um segundo vértice v1

• E v1 é vizinho de s

• Então, ou v1 = t, ou existe um terceiro vértice v2

– E v2 é vizinho de v1

• E assim por diante...

A dificuldade é acertar qual vizinho v1 de s devemos usar...• Solução: testar todos!

5

Page 28: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Existe caminho entre s e t?Queremos saber se s e t estão na mesma componente conexa

Se estiverem, existe algum caminho de s até t

s v1 v2 vk−1 t· · ·

Se existe caminho e s ̸= t, existe um segundo vértice v1

• E v1 é vizinho de s

• Então, ou v1 = t, ou existe um terceiro vértice v2

– E v2 é vizinho de v1

• E assim por diante...

A dificuldade é acertar qual vizinho v1 de s devemos usar...• Solução: testar todos!

5

Page 29: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Existe caminho entre s e t?Queremos saber se s e t estão na mesma componente conexa

Se estiverem, existe algum caminho de s até t

s v1 v2 vk−1 t· · ·

Se existe caminho e s ̸= t, existe um segundo vértice v1

• E v1 é vizinho de s

• Então, ou v1 = t, ou existe um terceiro vértice v2

– E v2 é vizinho de v1

• E assim por diante...

A dificuldade é acertar qual vizinho v1 de s devemos usar...• Solução: testar todos!

5

Page 30: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Existe caminho entre s e t?Queremos saber se s e t estão na mesma componente conexa

Se estiverem, existe algum caminho de s até t

s v1 v2 vk−1 t· · ·

Se existe caminho e s ̸= t, existe um segundo vértice v1

• E v1 é vizinho de s

• Então, ou v1 = t, ou existe um terceiro vértice v2

– E v2 é vizinho de v1

• E assim por diante...

A dificuldade é acertar qual vizinho v1 de s devemos usar...• Solução: testar todos!

5

Page 31: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Existe caminho entre s e t?Queremos saber se s e t estão na mesma componente conexa

Se estiverem, existe algum caminho de s até t

s v1 v2 vk−1 t· · ·

Se existe caminho e s ̸= t, existe um segundo vértice v1

• E v1 é vizinho de s

• Então, ou v1 = t, ou existe um terceiro vértice v2– E v2 é vizinho de v1

• E assim por diante...

A dificuldade é acertar qual vizinho v1 de s devemos usar...• Solução: testar todos!

5

Page 32: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Existe caminho entre s e t?Queremos saber se s e t estão na mesma componente conexa

Se estiverem, existe algum caminho de s até t

s v1 v2 vk−1 t· · ·

Se existe caminho e s ̸= t, existe um segundo vértice v1

• E v1 é vizinho de s

• Então, ou v1 = t, ou existe um terceiro vértice v2– E v2 é vizinho de v1

• E assim por diante...

A dificuldade é acertar qual vizinho v1 de s devemos usar...• Solução: testar todos!

5

Page 33: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Existe caminho entre s e t?Queremos saber se s e t estão na mesma componente conexa

Se estiverem, existe algum caminho de s até t

s v1 v2 vk−1 t· · ·

Se existe caminho e s ̸= t, existe um segundo vértice v1

• E v1 é vizinho de s

• Então, ou v1 = t, ou existe um terceiro vértice v2– E v2 é vizinho de v1

• E assim por diante...

A dificuldade é acertar qual vizinho v1 de s devemos usar...

• Solução: testar todos!

5

Page 34: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Existe caminho entre s e t?Queremos saber se s e t estão na mesma componente conexa

Se estiverem, existe algum caminho de s até t

s v1 v2 vk−1 t· · ·

Se existe caminho e s ̸= t, existe um segundo vértice v1

• E v1 é vizinho de s

• Então, ou v1 = t, ou existe um terceiro vértice v2– E v2 é vizinho de v1

• E assim por diante...

A dificuldade é acertar qual vizinho v1 de s devemos usar...• Solução: testar todos!

5

Page 35: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Exemplo - Existe caminho de 0 até 15?

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

Essa é uma busca em profundidade:• Vá o máximo possível em uma direção• Se não encontrarmos o vértice, volte o mínimo possível• E pegue um novo caminho por um vértice não visitado

6

Page 36: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Exemplo - Existe caminho de 0 até 15?

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

Essa é uma busca em profundidade:• Vá o máximo possível em uma direção• Se não encontrarmos o vértice, volte o mínimo possível• E pegue um novo caminho por um vértice não visitado

6

Page 37: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Exemplo - Existe caminho de 0 até 15?

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

Essa é uma busca em profundidade:• Vá o máximo possível em uma direção• Se não encontrarmos o vértice, volte o mínimo possível• E pegue um novo caminho por um vértice não visitado

6

Page 38: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Exemplo - Existe caminho de 0 até 15?

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

Essa é uma busca em profundidade:• Vá o máximo possível em uma direção• Se não encontrarmos o vértice, volte o mínimo possível• E pegue um novo caminho por um vértice não visitado

6

Page 39: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Exemplo - Existe caminho de 0 até 15?

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

Essa é uma busca em profundidade:• Vá o máximo possível em uma direção• Se não encontrarmos o vértice, volte o mínimo possível• E pegue um novo caminho por um vértice não visitado

6

Page 40: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Exemplo - Existe caminho de 0 até 15?

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

Essa é uma busca em profundidade:• Vá o máximo possível em uma direção• Se não encontrarmos o vértice, volte o mínimo possível• E pegue um novo caminho por um vértice não visitado

6

Page 41: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Exemplo - Existe caminho de 0 até 15?

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

Essa é uma busca em profundidade:• Vá o máximo possível em uma direção• Se não encontrarmos o vértice, volte o mínimo possível• E pegue um novo caminho por um vértice não visitado

6

Page 42: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Exemplo - Existe caminho de 0 até 15?

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

Essa é uma busca em profundidade:• Vá o máximo possível em uma direção• Se não encontrarmos o vértice, volte o mínimo possível• E pegue um novo caminho por um vértice não visitado

6

Page 43: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Exemplo - Existe caminho de 0 até 15?

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

Essa é uma busca em profundidade:• Vá o máximo possível em uma direção• Se não encontrarmos o vértice, volte o mínimo possível• E pegue um novo caminho por um vértice não visitado

6

Page 44: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Exemplo - Existe caminho de 0 até 15?

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

Essa é uma busca em profundidade:• Vá o máximo possível em uma direção• Se não encontrarmos o vértice, volte o mínimo possível• E pegue um novo caminho por um vértice não visitado

6

Page 45: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Exemplo - Existe caminho de 0 até 15?

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

Essa é uma busca em profundidade:• Vá o máximo possível em uma direção• Se não encontrarmos o vértice, volte o mínimo possível• E pegue um novo caminho por um vértice não visitado

6

Page 46: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Exemplo - Existe caminho de 0 até 15?

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

Essa é uma busca em profundidade:• Vá o máximo possível em uma direção• Se não encontrarmos o vértice, volte o mínimo possível• E pegue um novo caminho por um vértice não visitado

6

Page 47: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Exemplo - Existe caminho de 0 até 15?

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

Essa é uma busca em profundidade:• Vá o máximo possível em uma direção• Se não encontrarmos o vértice, volte o mínimo possível• E pegue um novo caminho por um vértice não visitado

6

Page 48: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Exemplo - Existe caminho de 0 até 15?

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

Essa é uma busca em profundidade:• Vá o máximo possível em uma direção• Se não encontrarmos o vértice, volte o mínimo possível• E pegue um novo caminho por um vértice não visitado

6

Page 49: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Exemplo - Existe caminho de 0 até 15?

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

Essa é uma busca em profundidade:• Vá o máximo possível em uma direção• Se não encontrarmos o vértice, volte o mínimo possível• E pegue um novo caminho por um vértice não visitado

6

Page 50: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Exemplo - Existe caminho de 0 até 15?

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

Essa é uma busca em profundidade:• Vá o máximo possível em uma direção• Se não encontrarmos o vértice, volte o mínimo possível• E pegue um novo caminho por um vértice não visitado

6

Page 51: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Exemplo - Existe caminho de 0 até 15?

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

Essa é uma busca em profundidade:• Vá o máximo possível em uma direção• Se não encontrarmos o vértice, volte o mínimo possível• E pegue um novo caminho por um vértice não visitado

6

Page 52: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Exemplo - Existe caminho de 0 até 15?

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

Essa é uma busca em profundidade:• Vá o máximo possível em uma direção• Se não encontrarmos o vértice, volte o mínimo possível• E pegue um novo caminho por um vértice não visitado

6

Page 53: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Exemplo - Existe caminho de 0 até 15?

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

Essa é uma busca em profundidade:• Vá o máximo possível em uma direção• Se não encontrarmos o vértice, volte o mínimo possível• E pegue um novo caminho por um vértice não visitado

6

Page 54: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Exemplo - Existe caminho de 0 até 15?

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

Essa é uma busca em profundidade:• Vá o máximo possível em uma direção• Se não encontrarmos o vértice, volte o mínimo possível• E pegue um novo caminho por um vértice não visitado

6

Page 55: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Exemplo - Existe caminho de 0 até 15?

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

Essa é uma busca em profundidade:• Vá o máximo possível em uma direção• Se não encontrarmos o vértice, volte o mínimo possível• E pegue um novo caminho por um vértice não visitado

6

Page 56: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Exemplo - Existe caminho de 0 até 15?

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

Essa é uma busca em profundidade:• Vá o máximo possível em uma direção• Se não encontrarmos o vértice, volte o mínimo possível• E pegue um novo caminho por um vértice não visitado

6

Page 57: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Exemplo - Existe caminho de 0 até 15?

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

Essa é uma busca em profundidade:• Vá o máximo possível em uma direção• Se não encontrarmos o vértice, volte o mínimo possível• E pegue um novo caminho por um vértice não visitado

6

Page 58: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Exemplo - Existe caminho de 0 até 15?

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

Essa é uma busca em profundidade:

• Vá o máximo possível em uma direção• Se não encontrarmos o vértice, volte o mínimo possível• E pegue um novo caminho por um vértice não visitado

6

Page 59: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Exemplo - Existe caminho de 0 até 15?

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

Essa é uma busca em profundidade:• Vá o máximo possível em uma direção

• Se não encontrarmos o vértice, volte o mínimo possível• E pegue um novo caminho por um vértice não visitado

6

Page 60: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Exemplo - Existe caminho de 0 até 15?

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

Essa é uma busca em profundidade:• Vá o máximo possível em uma direção• Se não encontrarmos o vértice, volte o mínimo possível

• E pegue um novo caminho por um vértice não visitado

6

Page 61: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Exemplo - Existe caminho de 0 até 15?

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

Essa é uma busca em profundidade:• Vá o máximo possível em uma direção• Se não encontrarmos o vértice, volte o mínimo possível• E pegue um novo caminho por um vértice não visitado

6

Page 62: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Implementação (com Matriz de Adjacências)1 int existe_caminho(Grafo g, int s, int t) {2 int encontrou, i, *visitado = malloc(g.n * sizeof(int));3 for (i = 0; i < g.n; i++)4 visitado[i] = 0;5 encontrou = busca_rec(g, visitado, s, t);6 free(visitado);7 return encontrou;8 }

1 int busca_rec(Grafo g, int *visitado, int v, int t) {2 int w;3 if (v == t)4 return 1; /*sempre existe caminho de t para t*/5 visitado[v] = 1;6 for (w = 0; w < g.n; w++)7 if (g.adj[v][w] && !visitado[w])8 if (busca_rec(g, visitado, w, t))9 return 1;

10 return 0;11 }

E se quisermos saber quais são as componentes conexas?

7

Page 63: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Implementação (com Matriz de Adjacências)1 int existe_caminho(Grafo g, int s, int t) {2 int encontrou, i, *visitado = malloc(g.n * sizeof(int));3 for (i = 0; i < g.n; i++)4 visitado[i] = 0;5 encontrou = busca_rec(g, visitado, s, t);6 free(visitado);7 return encontrou;8 }

1 int busca_rec(Grafo g, int *visitado, int v, int t) {

2 int w;3 if (v == t)4 return 1; /*sempre existe caminho de t para t*/5 visitado[v] = 1;6 for (w = 0; w < g.n; w++)7 if (g.adj[v][w] && !visitado[w])8 if (busca_rec(g, visitado, w, t))9 return 1;

10 return 0;11 }

E se quisermos saber quais são as componentes conexas?

7

Page 64: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Implementação (com Matriz de Adjacências)1 int existe_caminho(Grafo g, int s, int t) {2 int encontrou, i, *visitado = malloc(g.n * sizeof(int));3 for (i = 0; i < g.n; i++)4 visitado[i] = 0;5 encontrou = busca_rec(g, visitado, s, t);6 free(visitado);7 return encontrou;8 }

1 int busca_rec(Grafo g, int *visitado, int v, int t) {2 int w;3 if (v == t)4 return 1; /*sempre existe caminho de t para t*/

5 visitado[v] = 1;6 for (w = 0; w < g.n; w++)7 if (g.adj[v][w] && !visitado[w])8 if (busca_rec(g, visitado, w, t))9 return 1;

10 return 0;11 }

E se quisermos saber quais são as componentes conexas?

7

Page 65: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Implementação (com Matriz de Adjacências)1 int existe_caminho(Grafo g, int s, int t) {2 int encontrou, i, *visitado = malloc(g.n * sizeof(int));3 for (i = 0; i < g.n; i++)4 visitado[i] = 0;5 encontrou = busca_rec(g, visitado, s, t);6 free(visitado);7 return encontrou;8 }

1 int busca_rec(Grafo g, int *visitado, int v, int t) {2 int w;3 if (v == t)4 return 1; /*sempre existe caminho de t para t*/5 visitado[v] = 1;

6 for (w = 0; w < g.n; w++)7 if (g.adj[v][w] && !visitado[w])8 if (busca_rec(g, visitado, w, t))9 return 1;

10 return 0;11 }

E se quisermos saber quais são as componentes conexas?

7

Page 66: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Implementação (com Matriz de Adjacências)1 int existe_caminho(Grafo g, int s, int t) {2 int encontrou, i, *visitado = malloc(g.n * sizeof(int));3 for (i = 0; i < g.n; i++)4 visitado[i] = 0;5 encontrou = busca_rec(g, visitado, s, t);6 free(visitado);7 return encontrou;8 }

1 int busca_rec(Grafo g, int *visitado, int v, int t) {2 int w;3 if (v == t)4 return 1; /*sempre existe caminho de t para t*/5 visitado[v] = 1;6 for (w = 0; w < g.n; w++)

7 if (g.adj[v][w] && !visitado[w])8 if (busca_rec(g, visitado, w, t))9 return 1;

10 return 0;11 }

E se quisermos saber quais são as componentes conexas?

7

Page 67: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Implementação (com Matriz de Adjacências)1 int existe_caminho(Grafo g, int s, int t) {2 int encontrou, i, *visitado = malloc(g.n * sizeof(int));3 for (i = 0; i < g.n; i++)4 visitado[i] = 0;5 encontrou = busca_rec(g, visitado, s, t);6 free(visitado);7 return encontrou;8 }

1 int busca_rec(Grafo g, int *visitado, int v, int t) {2 int w;3 if (v == t)4 return 1; /*sempre existe caminho de t para t*/5 visitado[v] = 1;6 for (w = 0; w < g.n; w++)7 if (g.adj[v][w] && !visitado[w])

8 if (busca_rec(g, visitado, w, t))9 return 1;

10 return 0;11 }

E se quisermos saber quais são as componentes conexas?

7

Page 68: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Implementação (com Matriz de Adjacências)1 int existe_caminho(Grafo g, int s, int t) {2 int encontrou, i, *visitado = malloc(g.n * sizeof(int));3 for (i = 0; i < g.n; i++)4 visitado[i] = 0;5 encontrou = busca_rec(g, visitado, s, t);6 free(visitado);7 return encontrou;8 }

1 int busca_rec(Grafo g, int *visitado, int v, int t) {2 int w;3 if (v == t)4 return 1; /*sempre existe caminho de t para t*/5 visitado[v] = 1;6 for (w = 0; w < g.n; w++)7 if (g.adj[v][w] && !visitado[w])8 if (busca_rec(g, visitado, w, t))9 return 1;

10 return 0;11 }

E se quisermos saber quais são as componentes conexas?

7

Page 69: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Implementação (com Matriz de Adjacências)1 int existe_caminho(Grafo g, int s, int t) {2 int encontrou, i, *visitado = malloc(g.n * sizeof(int));3 for (i = 0; i < g.n; i++)4 visitado[i] = 0;5 encontrou = busca_rec(g, visitado, s, t);6 free(visitado);7 return encontrou;8 }

1 int busca_rec(Grafo g, int *visitado, int v, int t) {2 int w;3 if (v == t)4 return 1; /*sempre existe caminho de t para t*/5 visitado[v] = 1;6 for (w = 0; w < g.n; w++)7 if (g.adj[v][w] && !visitado[w])8 if (busca_rec(g, visitado, w, t))9 return 1;

10 return 0;11 }

E se quisermos saber quais são as componentes conexas?

7

Page 70: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Implementação (com Matriz de Adjacências)1 int existe_caminho(Grafo g, int s, int t) {2 int encontrou, i, *visitado = malloc(g.n * sizeof(int));3 for (i = 0; i < g.n; i++)4 visitado[i] = 0;5 encontrou = busca_rec(g, visitado, s, t);6 free(visitado);7 return encontrou;8 }

1 int busca_rec(Grafo g, int *visitado, int v, int t) {2 int w;3 if (v == t)4 return 1; /*sempre existe caminho de t para t*/5 visitado[v] = 1;6 for (w = 0; w < g.n; w++)7 if (g.adj[v][w] && !visitado[w])8 if (busca_rec(g, visitado, w, t))9 return 1;

10 return 0;11 }

E se quisermos saber quais são as componentes conexas?7

Page 71: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Componentes Conexas (Listas de Adjacência)

1 int * encontra_componentes(Grafo g) {

2 int s, c = 0, *componentes = malloc(g.n * sizeof(int));3 for (s = 0; s < g.n; s++)4 componentes[s] = -1;5 for (s = 0; s < g.n; s++)6 if (componentes[s] == -1) {7 visita_rec(g, componentes, c, s);8 c++;9 }

10 return componentes;11 }

1 void visita_rec(Grafo g, int *componentes, int comp, int v) {2 No *t;3 componentes[v] = comp;4 for (t = g.adj[v]; t != NULL; t = t->prox)5 if (componentes[t->v] == -1)6 visita_rec(g, componentes, comp, t->v);7 }

8

Page 72: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Componentes Conexas (Listas de Adjacência)

1 int * encontra_componentes(Grafo g) {2 int s, c = 0, *componentes = malloc(g.n * sizeof(int));

3 for (s = 0; s < g.n; s++)4 componentes[s] = -1;5 for (s = 0; s < g.n; s++)6 if (componentes[s] == -1) {7 visita_rec(g, componentes, c, s);8 c++;9 }

10 return componentes;11 }

1 void visita_rec(Grafo g, int *componentes, int comp, int v) {2 No *t;3 componentes[v] = comp;4 for (t = g.adj[v]; t != NULL; t = t->prox)5 if (componentes[t->v] == -1)6 visita_rec(g, componentes, comp, t->v);7 }

8

Page 73: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Componentes Conexas (Listas de Adjacência)

1 int * encontra_componentes(Grafo g) {2 int s, c = 0, *componentes = malloc(g.n * sizeof(int));3 for (s = 0; s < g.n; s++)4 componentes[s] = -1;

5 for (s = 0; s < g.n; s++)6 if (componentes[s] == -1) {7 visita_rec(g, componentes, c, s);8 c++;9 }

10 return componentes;11 }

1 void visita_rec(Grafo g, int *componentes, int comp, int v) {2 No *t;3 componentes[v] = comp;4 for (t = g.adj[v]; t != NULL; t = t->prox)5 if (componentes[t->v] == -1)6 visita_rec(g, componentes, comp, t->v);7 }

8

Page 74: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Componentes Conexas (Listas de Adjacência)

1 int * encontra_componentes(Grafo g) {2 int s, c = 0, *componentes = malloc(g.n * sizeof(int));3 for (s = 0; s < g.n; s++)4 componentes[s] = -1;5 for (s = 0; s < g.n; s++)6 if (componentes[s] == -1) {

7 visita_rec(g, componentes, c, s);8 c++;9 }

10 return componentes;11 }

1 void visita_rec(Grafo g, int *componentes, int comp, int v) {2 No *t;3 componentes[v] = comp;4 for (t = g.adj[v]; t != NULL; t = t->prox)5 if (componentes[t->v] == -1)6 visita_rec(g, componentes, comp, t->v);7 }

8

Page 75: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Componentes Conexas (Listas de Adjacência)

1 int * encontra_componentes(Grafo g) {2 int s, c = 0, *componentes = malloc(g.n * sizeof(int));3 for (s = 0; s < g.n; s++)4 componentes[s] = -1;5 for (s = 0; s < g.n; s++)6 if (componentes[s] == -1) {7 visita_rec(g, componentes, c, s);

8 c++;9 }

10 return componentes;11 }

1 void visita_rec(Grafo g, int *componentes, int comp, int v) {2 No *t;3 componentes[v] = comp;4 for (t = g.adj[v]; t != NULL; t = t->prox)5 if (componentes[t->v] == -1)6 visita_rec(g, componentes, comp, t->v);7 }

8

Page 76: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Componentes Conexas (Listas de Adjacência)

1 int * encontra_componentes(Grafo g) {2 int s, c = 0, *componentes = malloc(g.n * sizeof(int));3 for (s = 0; s < g.n; s++)4 componentes[s] = -1;5 for (s = 0; s < g.n; s++)6 if (componentes[s] == -1) {7 visita_rec(g, componentes, c, s);8 c++;

9 }10 return componentes;11 }

1 void visita_rec(Grafo g, int *componentes, int comp, int v) {2 No *t;3 componentes[v] = comp;4 for (t = g.adj[v]; t != NULL; t = t->prox)5 if (componentes[t->v] == -1)6 visita_rec(g, componentes, comp, t->v);7 }

8

Page 77: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Componentes Conexas (Listas de Adjacência)

1 int * encontra_componentes(Grafo g) {2 int s, c = 0, *componentes = malloc(g.n * sizeof(int));3 for (s = 0; s < g.n; s++)4 componentes[s] = -1;5 for (s = 0; s < g.n; s++)6 if (componentes[s] == -1) {7 visita_rec(g, componentes, c, s);8 c++;9 }

10 return componentes;11 }

1 void visita_rec(Grafo g, int *componentes, int comp, int v) {2 No *t;3 componentes[v] = comp;4 for (t = g.adj[v]; t != NULL; t = t->prox)5 if (componentes[t->v] == -1)6 visita_rec(g, componentes, comp, t->v);7 }

8

Page 78: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Componentes Conexas (Listas de Adjacência)

1 int * encontra_componentes(Grafo g) {2 int s, c = 0, *componentes = malloc(g.n * sizeof(int));3 for (s = 0; s < g.n; s++)4 componentes[s] = -1;5 for (s = 0; s < g.n; s++)6 if (componentes[s] == -1) {7 visita_rec(g, componentes, c, s);8 c++;9 }

10 return componentes;11 }

1 void visita_rec(Grafo g, int *componentes, int comp, int v) {

2 No *t;3 componentes[v] = comp;4 for (t = g.adj[v]; t != NULL; t = t->prox)5 if (componentes[t->v] == -1)6 visita_rec(g, componentes, comp, t->v);7 }

8

Page 79: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Componentes Conexas (Listas de Adjacência)

1 int * encontra_componentes(Grafo g) {2 int s, c = 0, *componentes = malloc(g.n * sizeof(int));3 for (s = 0; s < g.n; s++)4 componentes[s] = -1;5 for (s = 0; s < g.n; s++)6 if (componentes[s] == -1) {7 visita_rec(g, componentes, c, s);8 c++;9 }

10 return componentes;11 }

1 void visita_rec(Grafo g, int *componentes, int comp, int v) {2 No *t;3 componentes[v] = comp;

4 for (t = g.adj[v]; t != NULL; t = t->prox)5 if (componentes[t->v] == -1)6 visita_rec(g, componentes, comp, t->v);7 }

8

Page 80: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Componentes Conexas (Listas de Adjacência)

1 int * encontra_componentes(Grafo g) {2 int s, c = 0, *componentes = malloc(g.n * sizeof(int));3 for (s = 0; s < g.n; s++)4 componentes[s] = -1;5 for (s = 0; s < g.n; s++)6 if (componentes[s] == -1) {7 visita_rec(g, componentes, c, s);8 c++;9 }

10 return componentes;11 }

1 void visita_rec(Grafo g, int *componentes, int comp, int v) {2 No *t;3 componentes[v] = comp;4 for (t = g.adj[v]; t != NULL; t = t->prox)

5 if (componentes[t->v] == -1)6 visita_rec(g, componentes, comp, t->v);7 }

8

Page 81: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Componentes Conexas (Listas de Adjacência)

1 int * encontra_componentes(Grafo g) {2 int s, c = 0, *componentes = malloc(g.n * sizeof(int));3 for (s = 0; s < g.n; s++)4 componentes[s] = -1;5 for (s = 0; s < g.n; s++)6 if (componentes[s] == -1) {7 visita_rec(g, componentes, c, s);8 c++;9 }

10 return componentes;11 }

1 void visita_rec(Grafo g, int *componentes, int comp, int v) {2 No *t;3 componentes[v] = comp;4 for (t = g.adj[v]; t != NULL; t = t->prox)5 if (componentes[t->v] == -1)

6 visita_rec(g, componentes, comp, t->v);7 }

8

Page 82: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Componentes Conexas (Listas de Adjacência)

1 int * encontra_componentes(Grafo g) {2 int s, c = 0, *componentes = malloc(g.n * sizeof(int));3 for (s = 0; s < g.n; s++)4 componentes[s] = -1;5 for (s = 0; s < g.n; s++)6 if (componentes[s] == -1) {7 visita_rec(g, componentes, c, s);8 c++;9 }

10 return componentes;11 }

1 void visita_rec(Grafo g, int *componentes, int comp, int v) {2 No *t;3 componentes[v] = comp;4 for (t = g.adj[v]; t != NULL; t = t->prox)5 if (componentes[t->v] == -1)6 visita_rec(g, componentes, comp, t->v);7 }

8

Page 83: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Ciclos em Grafos0

1

2 3

45

6

7 8

9

Um ciclo em um grafo é:

• Uma sequência de vértices vizinhos sem repetição excetopelo primeiro e o último vértice que são idênticos

Por exemplo:• 5, 6, 7, 8, 9, 5 é um ciclo• 1, 2, 3 não é um ciclo• 1, 2, 7, 6, 1 é um ciclo• 1, 2, 7, 6, 1, 0 não é um ciclo

(mas contém um ciclo)

9

Page 84: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Ciclos em Grafos0

1

2 3

45

6

7 8

9

Um ciclo em um grafo é:• Uma sequência de vértices vizinhos sem repetição exceto

pelo primeiro e o último vértice que são idênticos

Por exemplo:• 5, 6, 7, 8, 9, 5 é um ciclo• 1, 2, 3 não é um ciclo• 1, 2, 7, 6, 1 é um ciclo• 1, 2, 7, 6, 1, 0 não é um ciclo

(mas contém um ciclo)

9

Page 85: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Ciclos em Grafos0

1

2 3

45

6

7 8

9

Um ciclo em um grafo é:• Uma sequência de vértices vizinhos sem repetição exceto

pelo primeiro e o último vértice que são idênticos

Por exemplo:

• 5, 6, 7, 8, 9, 5 é um ciclo• 1, 2, 3 não é um ciclo• 1, 2, 7, 6, 1 é um ciclo• 1, 2, 7, 6, 1, 0 não é um ciclo

(mas contém um ciclo)

9

Page 86: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Ciclos em Grafos0

1

2 3

45

6

7 8

9

Um ciclo em um grafo é:• Uma sequência de vértices vizinhos sem repetição exceto

pelo primeiro e o último vértice que são idênticos

Por exemplo:• 5, 6, 7, 8, 9, 5 é um ciclo

• 1, 2, 3 não é um ciclo• 1, 2, 7, 6, 1 é um ciclo• 1, 2, 7, 6, 1, 0 não é um ciclo

(mas contém um ciclo)

9

Page 87: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Ciclos em Grafos0

1

2 3

45

6

7 8

9

Um ciclo em um grafo é:• Uma sequência de vértices vizinhos sem repetição exceto

pelo primeiro e o último vértice que são idênticos

Por exemplo:• 5, 6, 7, 8, 9, 5 é um ciclo• 1, 2, 3 não é um ciclo

• 1, 2, 7, 6, 1 é um ciclo• 1, 2, 7, 6, 1, 0 não é um ciclo

(mas contém um ciclo)

9

Page 88: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Ciclos em Grafos0

1

2 3

45

6

7 8

9

Um ciclo em um grafo é:• Uma sequência de vértices vizinhos sem repetição exceto

pelo primeiro e o último vértice que são idênticos

Por exemplo:• 5, 6, 7, 8, 9, 5 é um ciclo• 1, 2, 3 não é um ciclo• 1, 2, 7, 6, 1 é um ciclo

• 1, 2, 7, 6, 1, 0 não é um ciclo

(mas contém um ciclo)

9

Page 89: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Ciclos em Grafos0

1

2 3

45

6

7 8

9

Um ciclo em um grafo é:• Uma sequência de vértices vizinhos sem repetição exceto

pelo primeiro e o último vértice que são idênticos

Por exemplo:• 5, 6, 7, 8, 9, 5 é um ciclo• 1, 2, 3 não é um ciclo• 1, 2, 7, 6, 1 é um ciclo• 1, 2, 7, 6, 1, 0 não é um ciclo

(mas contém um ciclo)

9

Page 90: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Ciclos em Grafos0

1

2 3

45

6

7 8

9

Um ciclo em um grafo é:• Uma sequência de vértices vizinhos sem repetição exceto

pelo primeiro e o último vértice que são idênticos

Por exemplo:• 5, 6, 7, 8, 9, 5 é um ciclo• 1, 2, 3 não é um ciclo• 1, 2, 7, 6, 1 é um ciclo• 1, 2, 7, 6, 1, 0 não é um ciclo (mas contém um ciclo)

9

Page 91: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Árvores, Florestas e SubgrafosUma árvore é um grafo conexo acíclico

• Uma floresta é um grafo acíclico• Suas componentes conexas são árvores

Um subgrafo é um grafo obtido a partir da remoção devértices e arestas

• Podemos considerar também árvores/florestas que sãosubgrafos de um grafo dado

0

1

2 3

45

6

7 8

9

Um subgrafo que é uma floresta

10

Page 92: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Árvores, Florestas e SubgrafosUma árvore é um grafo conexo acíclico

• Uma floresta é um grafo acíclico

• Suas componentes conexas são árvores

Um subgrafo é um grafo obtido a partir da remoção devértices e arestas

• Podemos considerar também árvores/florestas que sãosubgrafos de um grafo dado

0

1

2 3

45

6

7 8

9

Um subgrafo que é uma floresta

10

Page 93: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Árvores, Florestas e SubgrafosUma árvore é um grafo conexo acíclico

• Uma floresta é um grafo acíclico• Suas componentes conexas são árvores

Um subgrafo é um grafo obtido a partir da remoção devértices e arestas

• Podemos considerar também árvores/florestas que sãosubgrafos de um grafo dado

0

1

2 3

45

6

7 8

9

Um subgrafo que é uma floresta

10

Page 94: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Árvores, Florestas e SubgrafosUma árvore é um grafo conexo acíclico

• Uma floresta é um grafo acíclico• Suas componentes conexas são árvores

Um subgrafo é um grafo obtido a partir da remoção devértices e arestas

• Podemos considerar também árvores/florestas que sãosubgrafos de um grafo dado

0

1

2 3

45

6

7 8

9

Um subgrafo que é uma floresta

10

Page 95: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Árvores, Florestas e SubgrafosUma árvore é um grafo conexo acíclico

• Uma floresta é um grafo acíclico• Suas componentes conexas são árvores

Um subgrafo é um grafo obtido a partir da remoção devértices e arestas

• Podemos considerar também árvores/florestas que sãosubgrafos de um grafo dado

0

1

2 3

45

6

7 8

9

Um subgrafo que é uma floresta

10

Page 96: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Árvores, Florestas e SubgrafosUma árvore é um grafo conexo acíclico

• Uma floresta é um grafo acíclico• Suas componentes conexas são árvores

Um subgrafo é um grafo obtido a partir da remoção devértices e arestas

• Podemos considerar também árvores/florestas que sãosubgrafos de um grafo dado

0

1

2 3

45

6

7 8

9

Um subgrafo que é uma floresta

10

Page 97: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Árvores, Florestas e SubgrafosUma árvore é um grafo conexo acíclico

• Uma floresta é um grafo acíclico• Suas componentes conexas são árvores

Um subgrafo é um grafo obtido a partir da remoção devértices e arestas

• Podemos considerar também árvores/florestas que sãosubgrafos de um grafo dado

0

1

2 3

45

6

7 8

9

Um subgrafo que é uma floresta

10

Page 98: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Árvores, Florestas e SubgrafosUma árvore é um grafo conexo acíclico

• Uma floresta é um grafo acíclico• Suas componentes conexas são árvores

Um subgrafo é um grafo obtido a partir da remoção devértices e arestas

• Podemos considerar também árvores/florestas que sãosubgrafos de um grafo dado

0

1

2 3

45

6

7 8

9

Um subgrafo que é uma floresta

Um subgrafo que é uma árvore

10

Page 99: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Árvores, Florestas e SubgrafosUma árvore é um grafo conexo acíclico

• Uma floresta é um grafo acíclico• Suas componentes conexas são árvores

Um subgrafo é um grafo obtido a partir da remoção devértices e arestas

• Podemos considerar também árvores/florestas que sãosubgrafos de um grafo dado

0

1

2 3

45

6

7 8

9

Um subgrafo que é uma floresta

Um subgrafo com ciclo

10

Page 100: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Caminhos de s para outros vértices da componente

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

As arestas usadas formam uma árvore!• Essa árvore dá um caminho de qualquer vértice até a raiz• Basta ir subindo na árvore

11

Page 101: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Caminhos de s para outros vértices da componente

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

As arestas usadas formam uma árvore!• Essa árvore dá um caminho de qualquer vértice até a raiz• Basta ir subindo na árvore

11

Page 102: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Caminhos de s para outros vértices da componente

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

As arestas usadas formam uma árvore!• Essa árvore dá um caminho de qualquer vértice até a raiz• Basta ir subindo na árvore

11

Page 103: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Caminhos de s para outros vértices da componente

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

As arestas usadas formam uma árvore!• Essa árvore dá um caminho de qualquer vértice até a raiz• Basta ir subindo na árvore

11

Page 104: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Caminhos de s para outros vértices da componente

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

As arestas usadas formam uma árvore!• Essa árvore dá um caminho de qualquer vértice até a raiz• Basta ir subindo na árvore

11

Page 105: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Caminhos de s para outros vértices da componente

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

As arestas usadas formam uma árvore!• Essa árvore dá um caminho de qualquer vértice até a raiz• Basta ir subindo na árvore

11

Page 106: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Caminhos de s para outros vértices da componente

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

As arestas usadas formam uma árvore!• Essa árvore dá um caminho de qualquer vértice até a raiz• Basta ir subindo na árvore

11

Page 107: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Caminhos de s para outros vértices da componente

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

As arestas usadas formam uma árvore!• Essa árvore dá um caminho de qualquer vértice até a raiz• Basta ir subindo na árvore

11

Page 108: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Caminhos de s para outros vértices da componente

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

As arestas usadas formam uma árvore!• Essa árvore dá um caminho de qualquer vértice até a raiz• Basta ir subindo na árvore

11

Page 109: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Caminhos de s para outros vértices da componente

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

As arestas usadas formam uma árvore!• Essa árvore dá um caminho de qualquer vértice até a raiz• Basta ir subindo na árvore

11

Page 110: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Caminhos de s para outros vértices da componente

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

As arestas usadas formam uma árvore!• Essa árvore dá um caminho de qualquer vértice até a raiz• Basta ir subindo na árvore

11

Page 111: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Caminhos de s para outros vértices da componente

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

As arestas usadas formam uma árvore!• Essa árvore dá um caminho de qualquer vértice até a raiz• Basta ir subindo na árvore

11

Page 112: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Caminhos de s para outros vértices da componente

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

As arestas usadas formam uma árvore!• Essa árvore dá um caminho de qualquer vértice até a raiz• Basta ir subindo na árvore

11

Page 113: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Caminhos de s para outros vértices da componente

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

As arestas usadas formam uma árvore!• Essa árvore dá um caminho de qualquer vértice até a raiz• Basta ir subindo na árvore

11

Page 114: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Caminhos de s para outros vértices da componente

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

As arestas usadas formam uma árvore!• Essa árvore dá um caminho de qualquer vértice até a raiz• Basta ir subindo na árvore

11

Page 115: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Caminhos de s para outros vértices da componente

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

As arestas usadas formam uma árvore!• Essa árvore dá um caminho de qualquer vértice até a raiz• Basta ir subindo na árvore

11

Page 116: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Caminhos de s para outros vértices da componente

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

As arestas usadas formam uma árvore!• Essa árvore dá um caminho de qualquer vértice até a raiz• Basta ir subindo na árvore

11

Page 117: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Caminhos de s para outros vértices da componente

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

As arestas usadas formam uma árvore!• Essa árvore dá um caminho de qualquer vértice até a raiz• Basta ir subindo na árvore

11

Page 118: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Caminhos de s para outros vértices da componente

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

As arestas usadas formam uma árvore!• Essa árvore dá um caminho de qualquer vértice até a raiz• Basta ir subindo na árvore

11

Page 119: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Caminhos de s para outros vértices da componente

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

As arestas usadas formam uma árvore!• Essa árvore dá um caminho de qualquer vértice até a raiz• Basta ir subindo na árvore

11

Page 120: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Caminhos de s para outros vértices da componente

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

As arestas usadas formam uma árvore!• Essa árvore dá um caminho de qualquer vértice até a raiz• Basta ir subindo na árvore

11

Page 121: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Caminhos de s para outros vértices da componente

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

As arestas usadas formam uma árvore!• Essa árvore dá um caminho de qualquer vértice até a raiz• Basta ir subindo na árvore

11

Page 122: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Caminhos de s para outros vértices da componente

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

As arestas usadas formam uma árvore!• Essa árvore dá um caminho de qualquer vértice até a raiz• Basta ir subindo na árvore

11

Page 123: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Caminhos de s para outros vértices da componente

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

As arestas usadas formam uma árvore!

• Essa árvore dá um caminho de qualquer vértice até a raiz• Basta ir subindo na árvore

11

Page 124: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Caminhos de s para outros vértices da componente

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

As arestas usadas formam uma árvore!• Essa árvore dá um caminho de qualquer vértice até a raiz

• Basta ir subindo na árvore

11

Page 125: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Caminhos de s para outros vértices da componente

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

As arestas usadas formam uma árvore!• Essa árvore dá um caminho de qualquer vértice até a raiz• Basta ir subindo na árvore

11

Page 126: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Caminhos de s para outros vértices da componente

1 int * encontra_caminhos(Grafo g, int s) {2 int i, *pai = malloc(g.n * sizeof(int));3 for (i = 0; i < g.n; i++)4 pai[i] = -1;5 busca_em_profundidade(g, pai, s, s);6 return pai;7 }

0

1

2

3

7

6

11

4

8

9

5

10

13

12

14

15

1 void busca_em_profundidade(Grafo g, int *pai, int p, int v) {2 No *t;3 pai[v] = p;4 for(t = g.adj[v]; t != NULL; t = t->prox)5 if (pai[t->v] == -1)6 busca_em_profundidade(g, pai, v, t->v);7 }

12

Page 127: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Caminhos de s para outros vértices da componente

1 int * encontra_caminhos(Grafo g, int s) {2 int i, *pai = malloc(g.n * sizeof(int));3 for (i = 0; i < g.n; i++)4 pai[i] = -1;5 busca_em_profundidade(g, pai, s, s);6 return pai;7 }

0

1

2

3

7

6

11

4

8

9

5

10

13

12

14

15

1 void busca_em_profundidade(Grafo g, int *pai, int p, int v) {2 No *t;3 pai[v] = p;4 for(t = g.adj[v]; t != NULL; t = t->prox)5 if (pai[t->v] == -1)6 busca_em_profundidade(g, pai, v, t->v);7 }

12

Page 128: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Caminhos de s para outros vértices da componente

1 int * encontra_caminhos(Grafo g, int s) {2 int i, *pai = malloc(g.n * sizeof(int));3 for (i = 0; i < g.n; i++)4 pai[i] = -1;5 busca_em_profundidade(g, pai, s, s);6 return pai;7 }

0

1

2

3

7

6

11

4

8

9

5

10

13

12

14

15

1 void busca_em_profundidade(Grafo g, int *pai, int p, int v) {2 No *t;3 pai[v] = p;4 for(t = g.adj[v]; t != NULL; t = t->prox)5 if (pai[t->v] == -1)6 busca_em_profundidade(g, pai, v, t->v);7 }

12

Page 129: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Imprimindo o caminho

1 void imprimi_caminho_reverso(int v, int *pai) {2 printf("%d", v);3 if(pai[v] != v)4 imprimi_caminho(pai[v], pai);5 }

1 void imprimi_caminho(int v, int *pai) {2 if(pai[v] != v)3 imprimi_caminho(pai[v], pai);4 printf("%d", v);5 }

0

1

2

3

7

6

11

4

8

9

5

10

13

12

14

15

13

Page 130: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Busca em Profundidade usando uma PilhaPodemos fazer uma busca em profundidade usando pilha:

• A cada passo, desempilhamos um vértice não visitado• E inserimos os seus vizinhos não visitados na pilha

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

Pilha

14

Page 131: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Busca em Profundidade usando uma PilhaPodemos fazer uma busca em profundidade usando pilha:

• A cada passo, desempilhamos um vértice não visitado• E inserimos os seus vizinhos não visitados na pilha

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

Pilha

14

Page 132: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Busca em Profundidade usando uma PilhaPodemos fazer uma busca em profundidade usando pilha:

• A cada passo, desempilhamos um vértice não visitado• E inserimos os seus vizinhos não visitados na pilha

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15 0

Pilha

14

Page 133: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Busca em Profundidade usando uma PilhaPodemos fazer uma busca em profundidade usando pilha:

• A cada passo, desempilhamos um vértice não visitado• E inserimos os seus vizinhos não visitados na pilha

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

Pilha

0

14

Page 134: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Busca em Profundidade usando uma PilhaPodemos fazer uma busca em profundidade usando pilha:

• A cada passo, desempilhamos um vértice não visitado• E inserimos os seus vizinhos não visitados na pilha

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15 4

Pilha

0

14

Page 135: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Busca em Profundidade usando uma PilhaPodemos fazer uma busca em profundidade usando pilha:

• A cada passo, desempilhamos um vértice não visitado• E inserimos os seus vizinhos não visitados na pilha

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15 4

1

Pilha

0

14

Page 136: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Busca em Profundidade usando uma PilhaPodemos fazer uma busca em profundidade usando pilha:

• A cada passo, desempilhamos um vértice não visitado• E inserimos os seus vizinhos não visitados na pilha

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15 4

1

Pilha

14

Page 137: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Busca em Profundidade usando uma PilhaPodemos fazer uma busca em profundidade usando pilha:

• A cada passo, desempilhamos um vértice não visitado• E inserimos os seus vizinhos não visitados na pilha

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15 4

1

Pilha

1

14

Page 138: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Busca em Profundidade usando uma PilhaPodemos fazer uma busca em profundidade usando pilha:

• A cada passo, desempilhamos um vértice não visitado• E inserimos os seus vizinhos não visitados na pilha

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15 4

4

Pilha

1

14

Page 139: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Busca em Profundidade usando uma PilhaPodemos fazer uma busca em profundidade usando pilha:

• A cada passo, desempilhamos um vértice não visitado• E inserimos os seus vizinhos não visitados na pilha

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15 4

4

2

Pilha

1

14

Page 140: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Busca em Profundidade usando uma PilhaPodemos fazer uma busca em profundidade usando pilha:

• A cada passo, desempilhamos um vértice não visitado• E inserimos os seus vizinhos não visitados na pilha

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15 4

4

2

Pilha

14

Page 141: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Busca em Profundidade usando uma PilhaPodemos fazer uma busca em profundidade usando pilha:

• A cada passo, desempilhamos um vértice não visitado• E inserimos os seus vizinhos não visitados na pilha

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15 4

4

Pilha

2

14

Page 142: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Busca em Profundidade usando uma PilhaPodemos fazer uma busca em profundidade usando pilha:

• A cada passo, desempilhamos um vértice não visitado• E inserimos os seus vizinhos não visitados na pilha

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15 4

4

6

Pilha

2

14

Page 143: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Busca em Profundidade usando uma PilhaPodemos fazer uma busca em profundidade usando pilha:

• A cada passo, desempilhamos um vértice não visitado• E inserimos os seus vizinhos não visitados na pilha

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15 4

4

6

3

Pilha

2

14

Page 144: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Busca em Profundidade usando uma PilhaPodemos fazer uma busca em profundidade usando pilha:

• A cada passo, desempilhamos um vértice não visitado• E inserimos os seus vizinhos não visitados na pilha

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15 4

4

6

3

Pilha

14

Page 145: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Busca em Profundidade usando uma PilhaPodemos fazer uma busca em profundidade usando pilha:

• A cada passo, desempilhamos um vértice não visitado• E inserimos os seus vizinhos não visitados na pilha

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15 4

4

6

Pilha

3

14

Page 146: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Busca em Profundidade usando uma PilhaPodemos fazer uma busca em profundidade usando pilha:

• A cada passo, desempilhamos um vértice não visitado• E inserimos os seus vizinhos não visitados na pilha

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15 4

4

6

7

Pilha

3

14

Page 147: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Busca em Profundidade usando uma PilhaPodemos fazer uma busca em profundidade usando pilha:

• A cada passo, desempilhamos um vértice não visitado• E inserimos os seus vizinhos não visitados na pilha

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15 4

4

6

7

Pilha

14

Page 148: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Busca em Profundidade usando uma PilhaPodemos fazer uma busca em profundidade usando pilha:

• A cada passo, desempilhamos um vértice não visitado• E inserimos os seus vizinhos não visitados na pilha

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15 4

4

6

Pilha

7

14

Page 149: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Busca em Profundidade usando uma PilhaPodemos fazer uma busca em profundidade usando pilha:

• A cada passo, desempilhamos um vértice não visitado• E inserimos os seus vizinhos não visitados na pilha

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15 4

4

6

Pilha

7

14

Page 150: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Busca em Profundidade usando uma PilhaPodemos fazer uma busca em profundidade usando pilha:

• A cada passo, desempilhamos um vértice não visitado• E inserimos os seus vizinhos não visitados na pilha

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15 4

4

6

11

6

Pilha

7

14

Page 151: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Busca em Profundidade usando uma PilhaPodemos fazer uma busca em profundidade usando pilha:

• A cada passo, desempilhamos um vértice não visitado• E inserimos os seus vizinhos não visitados na pilha

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15 4

4

6

11

6

Pilha

14

Page 152: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Busca em Profundidade usando uma PilhaPodemos fazer uma busca em profundidade usando pilha:

• A cada passo, desempilhamos um vértice não visitado• E inserimos os seus vizinhos não visitados na pilha

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15 4

4

6

11

Pilha

6

14

Page 153: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Busca em Profundidade usando uma PilhaPodemos fazer uma busca em profundidade usando pilha:

• A cada passo, desempilhamos um vértice não visitado• E inserimos os seus vizinhos não visitados na pilha

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15 4

4

6

11

11

Pilha

6

14

Page 154: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Busca em Profundidade usando uma PilhaPodemos fazer uma busca em profundidade usando pilha:

• A cada passo, desempilhamos um vértice não visitado• E inserimos os seus vizinhos não visitados na pilha

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15 4

4

6

11

11

Pilha

14

Page 155: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Busca em Profundidade usando uma PilhaPodemos fazer uma busca em profundidade usando pilha:

• A cada passo, desempilhamos um vértice não visitado• E inserimos os seus vizinhos não visitados na pilha

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15 4

4

6

11

Pilha

11

14

Page 156: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Busca em Profundidade usando uma PilhaPodemos fazer uma busca em profundidade usando pilha:

• A cada passo, desempilhamos um vértice não visitado• E inserimos os seus vizinhos não visitados na pilha

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15 4

4

6

11

Pilha

14

Page 157: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Busca em Profundidade usando uma PilhaPodemos fazer uma busca em profundidade usando pilha:

• A cada passo, desempilhamos um vértice não visitado• E inserimos os seus vizinhos não visitados na pilha

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15 4

4

6

Pilha

11

14

Page 158: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Busca em Profundidade usando uma PilhaPodemos fazer uma busca em profundidade usando pilha:

• A cada passo, desempilhamos um vértice não visitado• E inserimos os seus vizinhos não visitados na pilha

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15 4

4

Pilha

6

14

Page 159: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Busca em Profundidade usando uma PilhaPodemos fazer uma busca em profundidade usando pilha:

• A cada passo, desempilhamos um vértice não visitado• E inserimos os seus vizinhos não visitados na pilha

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15 4

Pilha

4

14

Page 160: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Busca em Profundidade usando uma PilhaPodemos fazer uma busca em profundidade usando pilha:

• A cada passo, desempilhamos um vértice não visitado• E inserimos os seus vizinhos não visitados na pilha

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15 4

Pilha

4

14

Page 161: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Busca em Profundidade usando uma PilhaPodemos fazer uma busca em profundidade usando pilha:

• A cada passo, desempilhamos um vértice não visitado• E inserimos os seus vizinhos não visitados na pilha

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15 4

13

12

12

10

14

Pilha

15

14

Page 162: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Busca em Profundidade usando uma PilhaPodemos fazer uma busca em profundidade usando pilha:

• A cada passo, desempilhamos um vértice não visitado• E inserimos os seus vizinhos não visitados na pilha

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15 4

13

12

12

10

14

Pilha

14

Page 163: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Busca em Profundidade usando uma PilhaPodemos fazer uma busca em profundidade usando pilha:

• A cada passo, desempilhamos um vértice não visitado• E inserimos os seus vizinhos não visitados na pilha

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15 4

13

12

12

10

Pilha

14

14

Page 164: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Busca em Profundidade usando uma PilhaPodemos fazer uma busca em profundidade usando pilha:

• A cada passo, desempilhamos um vértice não visitado• E inserimos os seus vizinhos não visitados na pilha

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15 4

13

12

12

Pilha

10

14

Page 165: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Busca em Profundidade usando uma PilhaPodemos fazer uma busca em profundidade usando pilha:

• A cada passo, desempilhamos um vértice não visitado• E inserimos os seus vizinhos não visitados na pilha

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15 4

13

12

Pilha

12

14

Page 166: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Busca em Profundidade usando uma PilhaPodemos fazer uma busca em profundidade usando pilha:

• A cada passo, desempilhamos um vértice não visitado• E inserimos os seus vizinhos não visitados na pilha

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15 4

13

Pilha

12

14

Page 167: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Busca em Profundidade usando uma PilhaPodemos fazer uma busca em profundidade usando pilha:

• A cada passo, desempilhamos um vértice não visitado• E inserimos os seus vizinhos não visitados na pilha

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15 4

Pilha

13

14

Page 168: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Busca em Profundidade usando uma PilhaPodemos fazer uma busca em profundidade usando pilha:

• A cada passo, desempilhamos um vértice não visitado• E inserimos os seus vizinhos não visitados na pilha

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

Pilha

4

14

Page 169: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Implementação1 int * busca_em_profundidade(Grafo g, int s) {

2 int w, v;3 int *pai = malloc(g.n * sizeof(int));4 int *visitado = malloc(g.n * sizeof(int));5 Pilha p;6 for (v = 0; v < g.n; v++) {7 pai[v] = -1;8 visitado[v] = 0;9 }

10 inicializa_pilha(&p);11 empilhar(&p,s);12 pai[s] = s;13 while(!eh_vazia(p)) {14 v = desempilhar(&p);15 visitado[v] = 1;16 for (w = 0; w < g.n; w++)17 if (g.adj[v][w] && !visitado[w]) {18 pai[w] = v;19 empilhar(&p, w);20 }21 }22 destroi_pilha(&p);23 free(visitado);24 return pai;25 }

15

Page 170: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Implementação1 int * busca_em_profundidade(Grafo g, int s) {2 int w, v;3 int *pai = malloc(g.n * sizeof(int));4 int *visitado = malloc(g.n * sizeof(int));

5 Pilha p;6 for (v = 0; v < g.n; v++) {7 pai[v] = -1;8 visitado[v] = 0;9 }

10 inicializa_pilha(&p);11 empilhar(&p,s);12 pai[s] = s;13 while(!eh_vazia(p)) {14 v = desempilhar(&p);15 visitado[v] = 1;16 for (w = 0; w < g.n; w++)17 if (g.adj[v][w] && !visitado[w]) {18 pai[w] = v;19 empilhar(&p, w);20 }21 }22 destroi_pilha(&p);23 free(visitado);24 return pai;25 }

15

Page 171: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Implementação1 int * busca_em_profundidade(Grafo g, int s) {2 int w, v;3 int *pai = malloc(g.n * sizeof(int));4 int *visitado = malloc(g.n * sizeof(int));5 Pilha p;

6 for (v = 0; v < g.n; v++) {7 pai[v] = -1;8 visitado[v] = 0;9 }

10 inicializa_pilha(&p);11 empilhar(&p,s);12 pai[s] = s;13 while(!eh_vazia(p)) {14 v = desempilhar(&p);15 visitado[v] = 1;16 for (w = 0; w < g.n; w++)17 if (g.adj[v][w] && !visitado[w]) {18 pai[w] = v;19 empilhar(&p, w);20 }21 }22 destroi_pilha(&p);23 free(visitado);24 return pai;25 }

15

Page 172: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Implementação1 int * busca_em_profundidade(Grafo g, int s) {2 int w, v;3 int *pai = malloc(g.n * sizeof(int));4 int *visitado = malloc(g.n * sizeof(int));5 Pilha p;6 for (v = 0; v < g.n; v++) {7 pai[v] = -1;8 visitado[v] = 0;9 }

10 inicializa_pilha(&p);11 empilhar(&p,s);12 pai[s] = s;13 while(!eh_vazia(p)) {14 v = desempilhar(&p);15 visitado[v] = 1;16 for (w = 0; w < g.n; w++)17 if (g.adj[v][w] && !visitado[w]) {18 pai[w] = v;19 empilhar(&p, w);20 }21 }22 destroi_pilha(&p);23 free(visitado);24 return pai;25 }

15

Page 173: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Implementação1 int * busca_em_profundidade(Grafo g, int s) {2 int w, v;3 int *pai = malloc(g.n * sizeof(int));4 int *visitado = malloc(g.n * sizeof(int));5 Pilha p;6 for (v = 0; v < g.n; v++) {7 pai[v] = -1;8 visitado[v] = 0;9 }

10 inicializa_pilha(&p);

11 empilhar(&p,s);12 pai[s] = s;13 while(!eh_vazia(p)) {14 v = desempilhar(&p);15 visitado[v] = 1;16 for (w = 0; w < g.n; w++)17 if (g.adj[v][w] && !visitado[w]) {18 pai[w] = v;19 empilhar(&p, w);20 }21 }22 destroi_pilha(&p);23 free(visitado);24 return pai;25 }

15

Page 174: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Implementação1 int * busca_em_profundidade(Grafo g, int s) {2 int w, v;3 int *pai = malloc(g.n * sizeof(int));4 int *visitado = malloc(g.n * sizeof(int));5 Pilha p;6 for (v = 0; v < g.n; v++) {7 pai[v] = -1;8 visitado[v] = 0;9 }

10 inicializa_pilha(&p);11 empilhar(&p,s);

12 pai[s] = s;13 while(!eh_vazia(p)) {14 v = desempilhar(&p);15 visitado[v] = 1;16 for (w = 0; w < g.n; w++)17 if (g.adj[v][w] && !visitado[w]) {18 pai[w] = v;19 empilhar(&p, w);20 }21 }22 destroi_pilha(&p);23 free(visitado);24 return pai;25 }

15

Page 175: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Implementação1 int * busca_em_profundidade(Grafo g, int s) {2 int w, v;3 int *pai = malloc(g.n * sizeof(int));4 int *visitado = malloc(g.n * sizeof(int));5 Pilha p;6 for (v = 0; v < g.n; v++) {7 pai[v] = -1;8 visitado[v] = 0;9 }

10 inicializa_pilha(&p);11 empilhar(&p,s);12 pai[s] = s;

13 while(!eh_vazia(p)) {14 v = desempilhar(&p);15 visitado[v] = 1;16 for (w = 0; w < g.n; w++)17 if (g.adj[v][w] && !visitado[w]) {18 pai[w] = v;19 empilhar(&p, w);20 }21 }22 destroi_pilha(&p);23 free(visitado);24 return pai;25 }

15

Page 176: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Implementação1 int * busca_em_profundidade(Grafo g, int s) {2 int w, v;3 int *pai = malloc(g.n * sizeof(int));4 int *visitado = malloc(g.n * sizeof(int));5 Pilha p;6 for (v = 0; v < g.n; v++) {7 pai[v] = -1;8 visitado[v] = 0;9 }

10 inicializa_pilha(&p);11 empilhar(&p,s);12 pai[s] = s;13 while(!eh_vazia(p)) {

14 v = desempilhar(&p);15 visitado[v] = 1;16 for (w = 0; w < g.n; w++)17 if (g.adj[v][w] && !visitado[w]) {18 pai[w] = v;19 empilhar(&p, w);20 }21 }22 destroi_pilha(&p);23 free(visitado);24 return pai;25 }

15

Page 177: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Implementação1 int * busca_em_profundidade(Grafo g, int s) {2 int w, v;3 int *pai = malloc(g.n * sizeof(int));4 int *visitado = malloc(g.n * sizeof(int));5 Pilha p;6 for (v = 0; v < g.n; v++) {7 pai[v] = -1;8 visitado[v] = 0;9 }

10 inicializa_pilha(&p);11 empilhar(&p,s);12 pai[s] = s;13 while(!eh_vazia(p)) {14 v = desempilhar(&p);

15 visitado[v] = 1;16 for (w = 0; w < g.n; w++)17 if (g.adj[v][w] && !visitado[w]) {18 pai[w] = v;19 empilhar(&p, w);20 }21 }22 destroi_pilha(&p);23 free(visitado);24 return pai;25 }

15

Page 178: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Implementação1 int * busca_em_profundidade(Grafo g, int s) {2 int w, v;3 int *pai = malloc(g.n * sizeof(int));4 int *visitado = malloc(g.n * sizeof(int));5 Pilha p;6 for (v = 0; v < g.n; v++) {7 pai[v] = -1;8 visitado[v] = 0;9 }

10 inicializa_pilha(&p);11 empilhar(&p,s);12 pai[s] = s;13 while(!eh_vazia(p)) {14 v = desempilhar(&p);15 visitado[v] = 1;

16 for (w = 0; w < g.n; w++)17 if (g.adj[v][w] && !visitado[w]) {18 pai[w] = v;19 empilhar(&p, w);20 }21 }22 destroi_pilha(&p);23 free(visitado);24 return pai;25 }

15

Page 179: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Implementação1 int * busca_em_profundidade(Grafo g, int s) {2 int w, v;3 int *pai = malloc(g.n * sizeof(int));4 int *visitado = malloc(g.n * sizeof(int));5 Pilha p;6 for (v = 0; v < g.n; v++) {7 pai[v] = -1;8 visitado[v] = 0;9 }

10 inicializa_pilha(&p);11 empilhar(&p,s);12 pai[s] = s;13 while(!eh_vazia(p)) {14 v = desempilhar(&p);15 visitado[v] = 1;16 for (w = 0; w < g.n; w++)

17 if (g.adj[v][w] && !visitado[w]) {18 pai[w] = v;19 empilhar(&p, w);20 }21 }22 destroi_pilha(&p);23 free(visitado);24 return pai;25 }

15

Page 180: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Implementação1 int * busca_em_profundidade(Grafo g, int s) {2 int w, v;3 int *pai = malloc(g.n * sizeof(int));4 int *visitado = malloc(g.n * sizeof(int));5 Pilha p;6 for (v = 0; v < g.n; v++) {7 pai[v] = -1;8 visitado[v] = 0;9 }

10 inicializa_pilha(&p);11 empilhar(&p,s);12 pai[s] = s;13 while(!eh_vazia(p)) {14 v = desempilhar(&p);15 visitado[v] = 1;16 for (w = 0; w < g.n; w++)17 if (g.adj[v][w] && !visitado[w]) {

18 pai[w] = v;19 empilhar(&p, w);20 }21 }22 destroi_pilha(&p);23 free(visitado);24 return pai;25 }

15

Page 181: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Implementação1 int * busca_em_profundidade(Grafo g, int s) {2 int w, v;3 int *pai = malloc(g.n * sizeof(int));4 int *visitado = malloc(g.n * sizeof(int));5 Pilha p;6 for (v = 0; v < g.n; v++) {7 pai[v] = -1;8 visitado[v] = 0;9 }

10 inicializa_pilha(&p);11 empilhar(&p,s);12 pai[s] = s;13 while(!eh_vazia(p)) {14 v = desempilhar(&p);15 visitado[v] = 1;16 for (w = 0; w < g.n; w++)17 if (g.adj[v][w] && !visitado[w]) {18 pai[w] = v;

19 empilhar(&p, w);20 }21 }22 destroi_pilha(&p);23 free(visitado);24 return pai;25 }

15

Page 182: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Implementação1 int * busca_em_profundidade(Grafo g, int s) {2 int w, v;3 int *pai = malloc(g.n * sizeof(int));4 int *visitado = malloc(g.n * sizeof(int));5 Pilha p;6 for (v = 0; v < g.n; v++) {7 pai[v] = -1;8 visitado[v] = 0;9 }

10 inicializa_pilha(&p);11 empilhar(&p,s);12 pai[s] = s;13 while(!eh_vazia(p)) {14 v = desempilhar(&p);15 visitado[v] = 1;16 for (w = 0; w < g.n; w++)17 if (g.adj[v][w] && !visitado[w]) {18 pai[w] = v;19 empilhar(&p, w);

20 }21 }22 destroi_pilha(&p);23 free(visitado);24 return pai;25 }

15

Page 183: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Implementação1 int * busca_em_profundidade(Grafo g, int s) {2 int w, v;3 int *pai = malloc(g.n * sizeof(int));4 int *visitado = malloc(g.n * sizeof(int));5 Pilha p;6 for (v = 0; v < g.n; v++) {7 pai[v] = -1;8 visitado[v] = 0;9 }

10 inicializa_pilha(&p);11 empilhar(&p,s);12 pai[s] = s;13 while(!eh_vazia(p)) {14 v = desempilhar(&p);15 visitado[v] = 1;16 for (w = 0; w < g.n; w++)17 if (g.adj[v][w] && !visitado[w]) {18 pai[w] = v;19 empilhar(&p, w);20 }21 }

22 destroi_pilha(&p);23 free(visitado);24 return pai;25 }

15

Page 184: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Implementação1 int * busca_em_profundidade(Grafo g, int s) {2 int w, v;3 int *pai = malloc(g.n * sizeof(int));4 int *visitado = malloc(g.n * sizeof(int));5 Pilha p;6 for (v = 0; v < g.n; v++) {7 pai[v] = -1;8 visitado[v] = 0;9 }

10 inicializa_pilha(&p);11 empilhar(&p,s);12 pai[s] = s;13 while(!eh_vazia(p)) {14 v = desempilhar(&p);15 visitado[v] = 1;16 for (w = 0; w < g.n; w++)17 if (g.adj[v][w] && !visitado[w]) {18 pai[w] = v;19 empilhar(&p, w);20 }21 }22 destroi_pilha(&p);

23 free(visitado);24 return pai;25 }

15

Page 185: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Implementação1 int * busca_em_profundidade(Grafo g, int s) {2 int w, v;3 int *pai = malloc(g.n * sizeof(int));4 int *visitado = malloc(g.n * sizeof(int));5 Pilha p;6 for (v = 0; v < g.n; v++) {7 pai[v] = -1;8 visitado[v] = 0;9 }

10 inicializa_pilha(&p);11 empilhar(&p,s);12 pai[s] = s;13 while(!eh_vazia(p)) {14 v = desempilhar(&p);15 visitado[v] = 1;16 for (w = 0; w < g.n; w++)17 if (g.adj[v][w] && !visitado[w]) {18 pai[w] = v;19 empilhar(&p, w);20 }21 }22 destroi_pilha(&p);23 free(visitado);

24 return pai;25 }

15

Page 186: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Implementação1 int * busca_em_profundidade(Grafo g, int s) {2 int w, v;3 int *pai = malloc(g.n * sizeof(int));4 int *visitado = malloc(g.n * sizeof(int));5 Pilha p;6 for (v = 0; v < g.n; v++) {7 pai[v] = -1;8 visitado[v] = 0;9 }

10 inicializa_pilha(&p);11 empilhar(&p,s);12 pai[s] = s;13 while(!eh_vazia(p)) {14 v = desempilhar(&p);15 visitado[v] = 1;16 for (w = 0; w < g.n; w++)17 if (g.adj[v][w] && !visitado[w]) {18 pai[w] = v;19 empilhar(&p, w);20 }21 }22 destroi_pilha(&p);23 free(visitado);24 return pai;25 }

15

Page 187: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

E se tivéssemos usando uma Fila?

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

Fila

16

Page 188: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

E se tivéssemos usando uma Fila?

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

0Fila

16

Page 189: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

E se tivéssemos usando uma Fila?

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

Fila

0

16

Page 190: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

E se tivéssemos usando uma Fila?

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

1Fila

0

16

Page 191: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

E se tivéssemos usando uma Fila?

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

1 4Fila

0

16

Page 192: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

E se tivéssemos usando uma Fila?

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

1 4Fila

16

Page 193: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

E se tivéssemos usando uma Fila?

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

4Fila

1

16

Page 194: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

E se tivéssemos usando uma Fila?

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

4 2Fila

1

16

Page 195: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

E se tivéssemos usando uma Fila?

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

4 2Fila

16

Page 196: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

E se tivéssemos usando uma Fila?

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

2Fila

4

16

Page 197: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

E se tivéssemos usando uma Fila?

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

2 8Fila

4

16

Page 198: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

E se tivéssemos usando uma Fila?

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

2 8Fila

16

Page 199: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

E se tivéssemos usando uma Fila?

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

8Fila

2

16

Page 200: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

E se tivéssemos usando uma Fila?

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

8 3Fila

2

16

Page 201: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

E se tivéssemos usando uma Fila?

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

8 3 6Fila

2

16

Page 202: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

E se tivéssemos usando uma Fila?

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

8 3 6Fila

16

Page 203: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

E se tivéssemos usando uma Fila?

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

8 3 6Fila

16

Page 204: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

E se tivéssemos usando uma Fila?

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

3 6Fila

8

16

Page 205: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

E se tivéssemos usando uma Fila?

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

3 6 9Fila

8

16

Page 206: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

E se tivéssemos usando uma Fila?

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

3 6 9 12Fila

8

16

Page 207: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

E se tivéssemos usando uma Fila?

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

3 6 9 12 13Fila

8

16

Page 208: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

E se tivéssemos usando uma Fila?

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

3 6 9 12 13Fila

16

Page 209: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

E se tivéssemos usando uma Fila?

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

6 9 12 13Fila

3

16

Page 210: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

E se tivéssemos usando uma Fila?

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

6 9 12 13 7Fila

3

16

Page 211: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

E se tivéssemos usando uma Fila?

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

6 9 12 13 7Fila

16

Page 212: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

E se tivéssemos usando uma Fila?

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

9 12 13 7Fila

6

16

Page 213: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

E se tivéssemos usando uma Fila?

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

9 12 13 7 11Fila

6

16

Page 214: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

E se tivéssemos usando uma Fila?

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

9 12 13 7 11Fila

16

Page 215: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

E se tivéssemos usando uma Fila?

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

12 13 7 11Fila

9

16

Page 216: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

E se tivéssemos usando uma Fila?

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

12 13 7 11 5Fila

9

16

Page 217: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

E se tivéssemos usando uma Fila?

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

12 13 7 11 5 10Fila

9

16

Page 218: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

E se tivéssemos usando uma Fila?

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

12 13 7 11 5 10Fila

16

Page 219: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

E se tivéssemos usando uma Fila?

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

13 7 11 5 10Fila

12

16

Page 220: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

E se tivéssemos usando uma Fila?

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

13 7 11 5 10Fila

16

Page 221: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

E se tivéssemos usando uma Fila?

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

7 11 5 10Fila

13

16

Page 222: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

E se tivéssemos usando uma Fila?

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

7 11 5 10 14Fila

13

16

Page 223: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

E se tivéssemos usando uma Fila?

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

7 11 5 10 14Fila

16

Page 224: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

E se tivéssemos usando uma Fila?

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

11 5 10 14Fila

7

16

Page 225: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

E se tivéssemos usando uma Fila?

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

11 5 10 14Fila

16

Page 226: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

E se tivéssemos usando uma Fila?

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

5 10 14Fila

11

16

Page 227: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

E se tivéssemos usando uma Fila?

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

5 10 14Fila

16

Page 228: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

E se tivéssemos usando uma Fila?

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

10 14Fila

5

16

Page 229: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

E se tivéssemos usando uma Fila?

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

10 14Fila

16

Page 230: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

E se tivéssemos usando uma Fila?

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

14Fila

10

16

Page 231: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

E se tivéssemos usando uma Fila?

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

14Fila

16

Page 232: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

E se tivéssemos usando uma Fila?

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

Fila

14

16

Page 233: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

E se tivéssemos usando uma Fila?

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

15Fila

14

16

Page 234: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

E se tivéssemos usando uma Fila?

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

15Fila

16

Page 235: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

E se tivéssemos usando uma Fila?

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

Fila

15

16

Page 236: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

E se tivéssemos usando uma Fila?

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

Fila

15

16

Page 237: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

E se tivéssemos usando uma Fila?

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

Usando uma fila, visitamos primeiro os vértices mais próximos• Enfileiramos os vizinhos de 0 (que estão a distância 1)• Desenfileiramos um de seus vizinho• E enfileiramos os vizinhos deste vértice

– que estão a distância 2 de 0

• Assim por diante...

A árvore nos dá um caminho mínimo entre raiz e vértice

17

Page 238: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

E se tivéssemos usando uma Fila?

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

Usando uma fila, visitamos primeiro os vértices mais próximos

• Enfileiramos os vizinhos de 0 (que estão a distância 1)• Desenfileiramos um de seus vizinho• E enfileiramos os vizinhos deste vértice

– que estão a distância 2 de 0

• Assim por diante...

A árvore nos dá um caminho mínimo entre raiz e vértice

17

Page 239: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

E se tivéssemos usando uma Fila?

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

Usando uma fila, visitamos primeiro os vértices mais próximos• Enfileiramos os vizinhos de 0 (que estão a distância 1)

• Desenfileiramos um de seus vizinho• E enfileiramos os vizinhos deste vértice

– que estão a distância 2 de 0

• Assim por diante...

A árvore nos dá um caminho mínimo entre raiz e vértice

17

Page 240: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

E se tivéssemos usando uma Fila?

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

Usando uma fila, visitamos primeiro os vértices mais próximos• Enfileiramos os vizinhos de 0 (que estão a distância 1)• Desenfileiramos um de seus vizinho

• E enfileiramos os vizinhos deste vértice

– que estão a distância 2 de 0

• Assim por diante...

A árvore nos dá um caminho mínimo entre raiz e vértice

17

Page 241: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

E se tivéssemos usando uma Fila?

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

Usando uma fila, visitamos primeiro os vértices mais próximos• Enfileiramos os vizinhos de 0 (que estão a distância 1)• Desenfileiramos um de seus vizinho• E enfileiramos os vizinhos deste vértice

– que estão a distância 2 de 0• Assim por diante...

A árvore nos dá um caminho mínimo entre raiz e vértice

17

Page 242: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

E se tivéssemos usando uma Fila?

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

Usando uma fila, visitamos primeiro os vértices mais próximos• Enfileiramos os vizinhos de 0 (que estão a distância 1)• Desenfileiramos um de seus vizinho• E enfileiramos os vizinhos deste vértice

– que estão a distância 2 de 0

• Assim por diante...

A árvore nos dá um caminho mínimo entre raiz e vértice

17

Page 243: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

E se tivéssemos usando uma Fila?

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

Usando uma fila, visitamos primeiro os vértices mais próximos• Enfileiramos os vizinhos de 0 (que estão a distância 1)• Desenfileiramos um de seus vizinho• E enfileiramos os vizinhos deste vértice

– que estão a distância 2 de 0• Assim por diante...

A árvore nos dá um caminho mínimo entre raiz e vértice

17

Page 244: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

E se tivéssemos usando uma Fila?

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

Usando uma fila, visitamos primeiro os vértices mais próximos• Enfileiramos os vizinhos de 0 (que estão a distância 1)• Desenfileiramos um de seus vizinho• E enfileiramos os vizinhos deste vértice

– que estão a distância 2 de 0• Assim por diante...

A árvore nos dá um caminho mínimo entre raiz e vértice17

Page 245: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Implementação da Busca em Largura1 int * busca_em_largura(Grafo g, int s) {

2 int w, v;3 int *pai = malloc(g.n * sizeof(int));4 int *visitado = malloc(g.n * sizeof(int));5 Fila f;6 for (v = 0; v < g.n; v++) {7 pai[v] = -1;8 visitado[v] = 0;9 }

10 inicializar_fila(&f);11 enfileira(&f,s);12 pai[s] = s;13 visitado[s] = 1;14 while(!fila_vazia(f)) {15 v = desenfileira(&f);16 for (w = 0; w < g.n; w++)17 if (g.adj[v][w] && !visitado[w]) {18 visitado[w] = 1;/*evita repetição na fila*/19 pai[w] = v;20 enfileira(&f, w);21 }22 }23 destroi_fila(&f);24 free(visitado);25 return pai;26 }

18

Page 246: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Implementação da Busca em Largura1 int * busca_em_largura(Grafo g, int s) {2 int w, v;3 int *pai = malloc(g.n * sizeof(int));4 int *visitado = malloc(g.n * sizeof(int));

5 Fila f;6 for (v = 0; v < g.n; v++) {7 pai[v] = -1;8 visitado[v] = 0;9 }

10 inicializar_fila(&f);11 enfileira(&f,s);12 pai[s] = s;13 visitado[s] = 1;14 while(!fila_vazia(f)) {15 v = desenfileira(&f);16 for (w = 0; w < g.n; w++)17 if (g.adj[v][w] && !visitado[w]) {18 visitado[w] = 1;/*evita repetição na fila*/19 pai[w] = v;20 enfileira(&f, w);21 }22 }23 destroi_fila(&f);24 free(visitado);25 return pai;26 }

18

Page 247: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Implementação da Busca em Largura1 int * busca_em_largura(Grafo g, int s) {2 int w, v;3 int *pai = malloc(g.n * sizeof(int));4 int *visitado = malloc(g.n * sizeof(int));5 Fila f;

6 for (v = 0; v < g.n; v++) {7 pai[v] = -1;8 visitado[v] = 0;9 }

10 inicializar_fila(&f);11 enfileira(&f,s);12 pai[s] = s;13 visitado[s] = 1;14 while(!fila_vazia(f)) {15 v = desenfileira(&f);16 for (w = 0; w < g.n; w++)17 if (g.adj[v][w] && !visitado[w]) {18 visitado[w] = 1;/*evita repetição na fila*/19 pai[w] = v;20 enfileira(&f, w);21 }22 }23 destroi_fila(&f);24 free(visitado);25 return pai;26 }

18

Page 248: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Implementação da Busca em Largura1 int * busca_em_largura(Grafo g, int s) {2 int w, v;3 int *pai = malloc(g.n * sizeof(int));4 int *visitado = malloc(g.n * sizeof(int));5 Fila f;6 for (v = 0; v < g.n; v++) {7 pai[v] = -1;8 visitado[v] = 0;9 }

10 inicializar_fila(&f);11 enfileira(&f,s);12 pai[s] = s;13 visitado[s] = 1;14 while(!fila_vazia(f)) {15 v = desenfileira(&f);16 for (w = 0; w < g.n; w++)17 if (g.adj[v][w] && !visitado[w]) {18 visitado[w] = 1;/*evita repetição na fila*/19 pai[w] = v;20 enfileira(&f, w);21 }22 }23 destroi_fila(&f);24 free(visitado);25 return pai;26 }

18

Page 249: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Implementação da Busca em Largura1 int * busca_em_largura(Grafo g, int s) {2 int w, v;3 int *pai = malloc(g.n * sizeof(int));4 int *visitado = malloc(g.n * sizeof(int));5 Fila f;6 for (v = 0; v < g.n; v++) {7 pai[v] = -1;8 visitado[v] = 0;9 }

10 inicializar_fila(&f);

11 enfileira(&f,s);12 pai[s] = s;13 visitado[s] = 1;14 while(!fila_vazia(f)) {15 v = desenfileira(&f);16 for (w = 0; w < g.n; w++)17 if (g.adj[v][w] && !visitado[w]) {18 visitado[w] = 1;/*evita repetição na fila*/19 pai[w] = v;20 enfileira(&f, w);21 }22 }23 destroi_fila(&f);24 free(visitado);25 return pai;26 }

18

Page 250: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Implementação da Busca em Largura1 int * busca_em_largura(Grafo g, int s) {2 int w, v;3 int *pai = malloc(g.n * sizeof(int));4 int *visitado = malloc(g.n * sizeof(int));5 Fila f;6 for (v = 0; v < g.n; v++) {7 pai[v] = -1;8 visitado[v] = 0;9 }

10 inicializar_fila(&f);11 enfileira(&f,s);

12 pai[s] = s;13 visitado[s] = 1;14 while(!fila_vazia(f)) {15 v = desenfileira(&f);16 for (w = 0; w < g.n; w++)17 if (g.adj[v][w] && !visitado[w]) {18 visitado[w] = 1;/*evita repetição na fila*/19 pai[w] = v;20 enfileira(&f, w);21 }22 }23 destroi_fila(&f);24 free(visitado);25 return pai;26 }

18

Page 251: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Implementação da Busca em Largura1 int * busca_em_largura(Grafo g, int s) {2 int w, v;3 int *pai = malloc(g.n * sizeof(int));4 int *visitado = malloc(g.n * sizeof(int));5 Fila f;6 for (v = 0; v < g.n; v++) {7 pai[v] = -1;8 visitado[v] = 0;9 }

10 inicializar_fila(&f);11 enfileira(&f,s);12 pai[s] = s;

13 visitado[s] = 1;14 while(!fila_vazia(f)) {15 v = desenfileira(&f);16 for (w = 0; w < g.n; w++)17 if (g.adj[v][w] && !visitado[w]) {18 visitado[w] = 1;/*evita repetição na fila*/19 pai[w] = v;20 enfileira(&f, w);21 }22 }23 destroi_fila(&f);24 free(visitado);25 return pai;26 }

18

Page 252: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Implementação da Busca em Largura1 int * busca_em_largura(Grafo g, int s) {2 int w, v;3 int *pai = malloc(g.n * sizeof(int));4 int *visitado = malloc(g.n * sizeof(int));5 Fila f;6 for (v = 0; v < g.n; v++) {7 pai[v] = -1;8 visitado[v] = 0;9 }

10 inicializar_fila(&f);11 enfileira(&f,s);12 pai[s] = s;13 visitado[s] = 1;

14 while(!fila_vazia(f)) {15 v = desenfileira(&f);16 for (w = 0; w < g.n; w++)17 if (g.adj[v][w] && !visitado[w]) {18 visitado[w] = 1;/*evita repetição na fila*/19 pai[w] = v;20 enfileira(&f, w);21 }22 }23 destroi_fila(&f);24 free(visitado);25 return pai;26 }

18

Page 253: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Implementação da Busca em Largura1 int * busca_em_largura(Grafo g, int s) {2 int w, v;3 int *pai = malloc(g.n * sizeof(int));4 int *visitado = malloc(g.n * sizeof(int));5 Fila f;6 for (v = 0; v < g.n; v++) {7 pai[v] = -1;8 visitado[v] = 0;9 }

10 inicializar_fila(&f);11 enfileira(&f,s);12 pai[s] = s;13 visitado[s] = 1;14 while(!fila_vazia(f)) {

15 v = desenfileira(&f);16 for (w = 0; w < g.n; w++)17 if (g.adj[v][w] && !visitado[w]) {18 visitado[w] = 1;/*evita repetição na fila*/19 pai[w] = v;20 enfileira(&f, w);21 }22 }23 destroi_fila(&f);24 free(visitado);25 return pai;26 }

18

Page 254: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Implementação da Busca em Largura1 int * busca_em_largura(Grafo g, int s) {2 int w, v;3 int *pai = malloc(g.n * sizeof(int));4 int *visitado = malloc(g.n * sizeof(int));5 Fila f;6 for (v = 0; v < g.n; v++) {7 pai[v] = -1;8 visitado[v] = 0;9 }

10 inicializar_fila(&f);11 enfileira(&f,s);12 pai[s] = s;13 visitado[s] = 1;14 while(!fila_vazia(f)) {15 v = desenfileira(&f);

16 for (w = 0; w < g.n; w++)17 if (g.adj[v][w] && !visitado[w]) {18 visitado[w] = 1;/*evita repetição na fila*/19 pai[w] = v;20 enfileira(&f, w);21 }22 }23 destroi_fila(&f);24 free(visitado);25 return pai;26 }

18

Page 255: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Implementação da Busca em Largura1 int * busca_em_largura(Grafo g, int s) {2 int w, v;3 int *pai = malloc(g.n * sizeof(int));4 int *visitado = malloc(g.n * sizeof(int));5 Fila f;6 for (v = 0; v < g.n; v++) {7 pai[v] = -1;8 visitado[v] = 0;9 }

10 inicializar_fila(&f);11 enfileira(&f,s);12 pai[s] = s;13 visitado[s] = 1;14 while(!fila_vazia(f)) {15 v = desenfileira(&f);16 for (w = 0; w < g.n; w++)

17 if (g.adj[v][w] && !visitado[w]) {18 visitado[w] = 1;/*evita repetição na fila*/19 pai[w] = v;20 enfileira(&f, w);21 }22 }23 destroi_fila(&f);24 free(visitado);25 return pai;26 }

18

Page 256: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Implementação da Busca em Largura1 int * busca_em_largura(Grafo g, int s) {2 int w, v;3 int *pai = malloc(g.n * sizeof(int));4 int *visitado = malloc(g.n * sizeof(int));5 Fila f;6 for (v = 0; v < g.n; v++) {7 pai[v] = -1;8 visitado[v] = 0;9 }

10 inicializar_fila(&f);11 enfileira(&f,s);12 pai[s] = s;13 visitado[s] = 1;14 while(!fila_vazia(f)) {15 v = desenfileira(&f);16 for (w = 0; w < g.n; w++)17 if (g.adj[v][w] && !visitado[w]) {

18 visitado[w] = 1;/*evita repetição na fila*/19 pai[w] = v;20 enfileira(&f, w);21 }22 }23 destroi_fila(&f);24 free(visitado);25 return pai;26 }

18

Page 257: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Implementação da Busca em Largura1 int * busca_em_largura(Grafo g, int s) {2 int w, v;3 int *pai = malloc(g.n * sizeof(int));4 int *visitado = malloc(g.n * sizeof(int));5 Fila f;6 for (v = 0; v < g.n; v++) {7 pai[v] = -1;8 visitado[v] = 0;9 }

10 inicializar_fila(&f);11 enfileira(&f,s);12 pai[s] = s;13 visitado[s] = 1;14 while(!fila_vazia(f)) {15 v = desenfileira(&f);16 for (w = 0; w < g.n; w++)17 if (g.adj[v][w] && !visitado[w]) {18 visitado[w] = 1;/*evita repetição na fila*/

19 pai[w] = v;20 enfileira(&f, w);21 }22 }23 destroi_fila(&f);24 free(visitado);25 return pai;26 }

18

Page 258: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Implementação da Busca em Largura1 int * busca_em_largura(Grafo g, int s) {2 int w, v;3 int *pai = malloc(g.n * sizeof(int));4 int *visitado = malloc(g.n * sizeof(int));5 Fila f;6 for (v = 0; v < g.n; v++) {7 pai[v] = -1;8 visitado[v] = 0;9 }

10 inicializar_fila(&f);11 enfileira(&f,s);12 pai[s] = s;13 visitado[s] = 1;14 while(!fila_vazia(f)) {15 v = desenfileira(&f);16 for (w = 0; w < g.n; w++)17 if (g.adj[v][w] && !visitado[w]) {18 visitado[w] = 1;/*evita repetição na fila*/19 pai[w] = v;

20 enfileira(&f, w);21 }22 }23 destroi_fila(&f);24 free(visitado);25 return pai;26 }

18

Page 259: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Implementação da Busca em Largura1 int * busca_em_largura(Grafo g, int s) {2 int w, v;3 int *pai = malloc(g.n * sizeof(int));4 int *visitado = malloc(g.n * sizeof(int));5 Fila f;6 for (v = 0; v < g.n; v++) {7 pai[v] = -1;8 visitado[v] = 0;9 }

10 inicializar_fila(&f);11 enfileira(&f,s);12 pai[s] = s;13 visitado[s] = 1;14 while(!fila_vazia(f)) {15 v = desenfileira(&f);16 for (w = 0; w < g.n; w++)17 if (g.adj[v][w] && !visitado[w]) {18 visitado[w] = 1;/*evita repetição na fila*/19 pai[w] = v;20 enfileira(&f, w);

21 }22 }23 destroi_fila(&f);24 free(visitado);25 return pai;26 }

18

Page 260: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Implementação da Busca em Largura1 int * busca_em_largura(Grafo g, int s) {2 int w, v;3 int *pai = malloc(g.n * sizeof(int));4 int *visitado = malloc(g.n * sizeof(int));5 Fila f;6 for (v = 0; v < g.n; v++) {7 pai[v] = -1;8 visitado[v] = 0;9 }

10 inicializar_fila(&f);11 enfileira(&f,s);12 pai[s] = s;13 visitado[s] = 1;14 while(!fila_vazia(f)) {15 v = desenfileira(&f);16 for (w = 0; w < g.n; w++)17 if (g.adj[v][w] && !visitado[w]) {18 visitado[w] = 1;/*evita repetição na fila*/19 pai[w] = v;20 enfileira(&f, w);21 }22 }

23 destroi_fila(&f);24 free(visitado);25 return pai;26 }

18

Page 261: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Implementação da Busca em Largura1 int * busca_em_largura(Grafo g, int s) {2 int w, v;3 int *pai = malloc(g.n * sizeof(int));4 int *visitado = malloc(g.n * sizeof(int));5 Fila f;6 for (v = 0; v < g.n; v++) {7 pai[v] = -1;8 visitado[v] = 0;9 }

10 inicializar_fila(&f);11 enfileira(&f,s);12 pai[s] = s;13 visitado[s] = 1;14 while(!fila_vazia(f)) {15 v = desenfileira(&f);16 for (w = 0; w < g.n; w++)17 if (g.adj[v][w] && !visitado[w]) {18 visitado[w] = 1;/*evita repetição na fila*/19 pai[w] = v;20 enfileira(&f, w);21 }22 }23 destroi_fila(&f);

24 free(visitado);25 return pai;26 }

18

Page 262: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Implementação da Busca em Largura1 int * busca_em_largura(Grafo g, int s) {2 int w, v;3 int *pai = malloc(g.n * sizeof(int));4 int *visitado = malloc(g.n * sizeof(int));5 Fila f;6 for (v = 0; v < g.n; v++) {7 pai[v] = -1;8 visitado[v] = 0;9 }

10 inicializar_fila(&f);11 enfileira(&f,s);12 pai[s] = s;13 visitado[s] = 1;14 while(!fila_vazia(f)) {15 v = desenfileira(&f);16 for (w = 0; w < g.n; w++)17 if (g.adj[v][w] && !visitado[w]) {18 visitado[w] = 1;/*evita repetição na fila*/19 pai[w] = v;20 enfileira(&f, w);21 }22 }23 destroi_fila(&f);24 free(visitado);

25 return pai;26 }

18

Page 263: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Implementação da Busca em Largura1 int * busca_em_largura(Grafo g, int s) {2 int w, v;3 int *pai = malloc(g.n * sizeof(int));4 int *visitado = malloc(g.n * sizeof(int));5 Fila f;6 for (v = 0; v < g.n; v++) {7 pai[v] = -1;8 visitado[v] = 0;9 }

10 inicializar_fila(&f);11 enfileira(&f,s);12 pai[s] = s;13 visitado[s] = 1;14 while(!fila_vazia(f)) {15 v = desenfileira(&f);16 for (w = 0; w < g.n; w++)17 if (g.adj[v][w] && !visitado[w]) {18 visitado[w] = 1;/*evita repetição na fila*/19 pai[w] = v;20 enfileira(&f, w);21 }22 }23 destroi_fila(&f);24 free(visitado);25 return pai;26 } 18

Page 264: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Tempo para fazer a buscaQuanto tempo demora para fazer uma busca?

• em profundidade ou em largura• em um grafo com n vértices e m arestas

Suponha que inserir e remover de pilha/fila leva O(1)• Podemos usar vetores ou listas ligadas

A busca percorre todos os vértices• E empilha/enfileira seus vizinhos não visitados• Se usarmos uma Matriz de Adjacências, leva O(n2)

E se usarmos Listas de Adjacência?• Cada aresta é analisada apenas duas vezes• Gastamos tempo O(max{n + m}) = O(n + m)

19

Page 265: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Tempo para fazer a buscaQuanto tempo demora para fazer uma busca?

• em profundidade ou em largura

• em um grafo com n vértices e m arestas

Suponha que inserir e remover de pilha/fila leva O(1)• Podemos usar vetores ou listas ligadas

A busca percorre todos os vértices• E empilha/enfileira seus vizinhos não visitados• Se usarmos uma Matriz de Adjacências, leva O(n2)

E se usarmos Listas de Adjacência?• Cada aresta é analisada apenas duas vezes• Gastamos tempo O(max{n + m}) = O(n + m)

19

Page 266: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Tempo para fazer a buscaQuanto tempo demora para fazer uma busca?

• em profundidade ou em largura• em um grafo com n vértices e m arestas

Suponha que inserir e remover de pilha/fila leva O(1)• Podemos usar vetores ou listas ligadas

A busca percorre todos os vértices• E empilha/enfileira seus vizinhos não visitados• Se usarmos uma Matriz de Adjacências, leva O(n2)

E se usarmos Listas de Adjacência?• Cada aresta é analisada apenas duas vezes• Gastamos tempo O(max{n + m}) = O(n + m)

19

Page 267: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Tempo para fazer a buscaQuanto tempo demora para fazer uma busca?

• em profundidade ou em largura• em um grafo com n vértices e m arestas

Suponha que inserir e remover de pilha/fila leva O(1)

• Podemos usar vetores ou listas ligadas

A busca percorre todos os vértices• E empilha/enfileira seus vizinhos não visitados• Se usarmos uma Matriz de Adjacências, leva O(n2)

E se usarmos Listas de Adjacência?• Cada aresta é analisada apenas duas vezes• Gastamos tempo O(max{n + m}) = O(n + m)

19

Page 268: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Tempo para fazer a buscaQuanto tempo demora para fazer uma busca?

• em profundidade ou em largura• em um grafo com n vértices e m arestas

Suponha que inserir e remover de pilha/fila leva O(1)• Podemos usar vetores ou listas ligadas

A busca percorre todos os vértices• E empilha/enfileira seus vizinhos não visitados• Se usarmos uma Matriz de Adjacências, leva O(n2)

E se usarmos Listas de Adjacência?• Cada aresta é analisada apenas duas vezes• Gastamos tempo O(max{n + m}) = O(n + m)

19

Page 269: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Tempo para fazer a buscaQuanto tempo demora para fazer uma busca?

• em profundidade ou em largura• em um grafo com n vértices e m arestas

Suponha que inserir e remover de pilha/fila leva O(1)• Podemos usar vetores ou listas ligadas

A busca percorre todos os vértices

• E empilha/enfileira seus vizinhos não visitados• Se usarmos uma Matriz de Adjacências, leva O(n2)

E se usarmos Listas de Adjacência?• Cada aresta é analisada apenas duas vezes• Gastamos tempo O(max{n + m}) = O(n + m)

19

Page 270: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Tempo para fazer a buscaQuanto tempo demora para fazer uma busca?

• em profundidade ou em largura• em um grafo com n vértices e m arestas

Suponha que inserir e remover de pilha/fila leva O(1)• Podemos usar vetores ou listas ligadas

A busca percorre todos os vértices• E empilha/enfileira seus vizinhos não visitados

• Se usarmos uma Matriz de Adjacências, leva O(n2)

E se usarmos Listas de Adjacência?• Cada aresta é analisada apenas duas vezes• Gastamos tempo O(max{n + m}) = O(n + m)

19

Page 271: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Tempo para fazer a buscaQuanto tempo demora para fazer uma busca?

• em profundidade ou em largura• em um grafo com n vértices e m arestas

Suponha que inserir e remover de pilha/fila leva O(1)• Podemos usar vetores ou listas ligadas

A busca percorre todos os vértices• E empilha/enfileira seus vizinhos não visitados• Se usarmos uma Matriz de Adjacências, leva O(n2)

E se usarmos Listas de Adjacência?• Cada aresta é analisada apenas duas vezes• Gastamos tempo O(max{n + m}) = O(n + m)

19

Page 272: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Tempo para fazer a buscaQuanto tempo demora para fazer uma busca?

• em profundidade ou em largura• em um grafo com n vértices e m arestas

Suponha que inserir e remover de pilha/fila leva O(1)• Podemos usar vetores ou listas ligadas

A busca percorre todos os vértices• E empilha/enfileira seus vizinhos não visitados• Se usarmos uma Matriz de Adjacências, leva O(n2)

E se usarmos Listas de Adjacência?

• Cada aresta é analisada apenas duas vezes• Gastamos tempo O(max{n + m}) = O(n + m)

19

Page 273: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Tempo para fazer a buscaQuanto tempo demora para fazer uma busca?

• em profundidade ou em largura• em um grafo com n vértices e m arestas

Suponha que inserir e remover de pilha/fila leva O(1)• Podemos usar vetores ou listas ligadas

A busca percorre todos os vértices• E empilha/enfileira seus vizinhos não visitados• Se usarmos uma Matriz de Adjacências, leva O(n2)

E se usarmos Listas de Adjacência?• Cada aresta é analisada apenas duas vezes

• Gastamos tempo O(max{n + m}) = O(n + m)

19

Page 274: MC-202 — Unidade 20 Percurso de Grafosrafael/cursos/1s2017/mc... · MC-202 — Unidade 20 Percurso de Grafos Rafael C. S. Schouery rafael@ic.unicamp.br Universidade Estadual de

Tempo para fazer a buscaQuanto tempo demora para fazer uma busca?

• em profundidade ou em largura• em um grafo com n vértices e m arestas

Suponha que inserir e remover de pilha/fila leva O(1)• Podemos usar vetores ou listas ligadas

A busca percorre todos os vértices• E empilha/enfileira seus vizinhos não visitados• Se usarmos uma Matriz de Adjacências, leva O(n2)

E se usarmos Listas de Adjacência?• Cada aresta é analisada apenas duas vezes• Gastamos tempo O(max{n + m}) = O(n + m)

19