• Nenhum resultado encontrado

Aplicações de BFS e DFS

N/A
N/A
Protected

Academic year: 2022

Share "Aplicações de BFS e DFS"

Copied!
47
0
0

Texto

(1)

Aplicações de BFS e DFS

CLRS 22 Elementary Graph Algorithms CLRS 22.2 e 22.3

(2)

Busca em largura

BFS(G,s)

1 para cadauG.V\ {s}faça

2 u.cor←branco u.d← ∞ u.π←nil 3 Q← ∅ fila dos vértices descobertos 4 s.cor←cinzento s.d ←0 s.π←nil 5 Q.INSIRA(s)

6 enquanto Q,∅ faça 7 uQ.REMOVA()

8 para cadavu.Estrela faça 9 se v.cor=branco

10 então v.cor←cinzento

11 v.du.d+ 1

12 v.πu

13 Q.INSIRA(v)

14 u.cor←preto

Análise de Algoritmos – 2º sem 2019 2 / 47

(3)

Descrição

Vértice branco: ainda não descoberto

Vértice cinzento: descoberto mas não processado Vértice cinzento: (são os vértices emQ)

Vértice preto: processado

BFS devolve emπ uma árvore BFenraizada em s. u.π: predecessor ou pai deu na árvore BF

u.d: distância de s au em G

BFS descobre todos os vértices à distânciak antes de descobrir qualquer um à distânciak+ 1

(4)

Descrição

Vértice branco: ainda não descoberto

Vértice cinzento: descoberto mas não processado Vértice cinzento: (são os vértices emQ)

Vértice preto: processado

BFS devolve emπ uma árvore BFenraizada em s.

u.π: predecessor ou pai deu na árvore BF u.d: distância de s au em G

BFS descobre todos os vértices à distânciak antes de descobrir qualquer um à distânciak+ 1

Análise de Algoritmos – 2º sem 2019 4 / 47

(5)

Consumo de tempo

Cada vértice é descoberto uma única vez, pois é branco e, ao ser descoberto, passa a ser cinzento, e depois preto.

A estrela de cada vértice descoberto é

percorrida uma única vez, quando o vértice sai deQ.

Logo, com listas de adjacência, o consumo de tempo éO(n+m), pois a inicialização custaÊ(n) e

a soma do tamanho das listas de adjacências percorridas éO(m).

O consumo de tempo de uma BFS é linear no tamanho do grafo.

(6)

Correção do algoritmo

Vamos verificar queu.d é a distância de s au e que a árvore BF contém um caminho mínimo des au.

Sejaδ(s,u) a distância de s au em G.

Lema: δ(s,v)δ(s,u) + 1 para toda arestauv. Lema: v.dδ(s,v) para todo vértice ao final da BFS. Lema: Se Q contém os vértices v1,v2, . . . ,vr nesta ordem,

Lema: então vr.dv1.d+ 1 e vi.dvi+1.d parai= 1, . . . ,r−1.

Análise de Algoritmos – 2º sem 2019 6 / 47

(7)

Correção do algoritmo

Vamos verificar queu.d é a distância de s au e que a árvore BF contém um caminho mínimo des au.

Sejaδ(s,u) a distância de s au em G.

Lema: δ(s,v)δ(s,u) + 1 para toda arestauv. Lema: v.dδ(s,v) para todo vértice ao final da BFS. Lema: Se Q contém os vértices v1,v2, . . . ,vr nesta ordem,

Lema: então vr.dv1.d+ 1 e vi.dvi+1.d parai= 1, . . . ,r−1.

(8)

Correção do algoritmo

Vamos verificar queu.d é a distância de s au e que a árvore BF contém um caminho mínimo des au.

Sejaδ(s,u) a distância de s au em G.

Lema: δ(s,v)δ(s,u) + 1 para toda aresta uv.

Lema: v.dδ(s,v) para todo vértice ao final da BFS. Lema: Se Q contém os vértices v1,v2, . . . ,vr nesta ordem,

Lema: então vr.dv1.d+ 1 e vi.dvi+1.d parai= 1, . . . ,r−1.

Análise de Algoritmos – 2º sem 2019 8 / 47

(9)

Correção do algoritmo

Vamos verificar queu.d é a distância de s au e que a árvore BF contém um caminho mínimo des au.

Sejaδ(s,u) a distância de s au em G.

Lema: δ(s,v)δ(s,u) + 1 para toda aresta uv.

Lema: v.dδ(s,v) para todo vértice ao final da BFS.

Lema: Se Q contém os vértices v1,v2, . . . ,vr nesta ordem,

Lema: então vr.dv1.d+ 1 e vi.dvi+1.d parai= 1, . . . ,r−1.

(10)

Correção do algoritmo

Vamos verificar queu.d é a distância de s au e que a árvore BF contém um caminho mínimo des au.

Sejaδ(s,u) a distância de s au em G.

Lema: δ(s,v)δ(s,u) + 1 para toda aresta uv.

Lema: v.dδ(s,v) para todo vértice ao final da BFS.

Lema: Se Q contém os vérticesv1,v2, . . . ,vr nesta ordem,

Lema: entãovr.dv1.d+ 1 e vi.dvi+1.d parai= 1, . . . ,r−1.

Análise de Algoritmos – 2º sem 2019 10 / 47

(11)

Correção

Sejaδ(s,u) a distância de s au em G.

Lema: δ(s,v)δ(s,u) + 1 para toda aresta uv.

Lema: v.dδ(s,v) para todo vértice ao final da BFS.

Lema: Se Q contém os vérticesv1,v2, . . . ,vr nesta ordem,

Lema: entãovr.dv1.d+ 1 e vi.dvi+1.d parai= 1, . . . ,r−1.

Corolário: Se vi entra na fila antes de vj,

Corolario: entãovi.dvj.d quando vj entra na fila. Teorema: Ao final da BFS, v.d =δ(s,v) para todo vV . Teorema: Ademais, para todo v alcançável de s com v,s, Teorema: um caminho mais curto de s a v consiste em um

Teorema: caminho mais curto de s aπ[v]seguido da arestaπ[v].v .

(12)

Correção

Sejaδ(s,u) a distância de s au em G.

Lema: δ(s,v)δ(s,u) + 1 para toda aresta uv.

Lema: v.dδ(s,v) para todo vértice ao final da BFS.

Lema: Se Q contém os vérticesv1,v2, . . . ,vr nesta ordem,

Lema: entãovr.dv1.d+ 1 e vi.dvi+1.d parai= 1, . . . ,r−1.

Corolário: Se vi entra na fila antes de vj,

Corolario: entãovi.dvj.d quando vj entra na fila.

Teorema: Ao final da BFS, v.d =δ(s,v) para todo vV . Teorema: Ademais, para todo v alcançável de s com v,s, Teorema: um caminho mais curto de s a v consiste em um

Teorema: caminho mais curto de s aπ[v]seguido da arestaπ[v].v .

Análise de Algoritmos – 2º sem 2019 12 / 47

(13)

Correção

Sejaδ(s,u) a distância de s au em G.

Lema: δ(s,v)δ(s,u) + 1 para toda aresta uv.

Lema: v.dδ(s,v) para todo vértice ao final da BFS.

Lema: Se Q contém os vérticesv1,v2, . . . ,vr nesta ordem,

Lema: entãovr.dv1.d+ 1 e vi.dvi+1.d parai= 1, . . . ,r−1.

Corolário: Se vi entra na fila antes de vj,

Corolario: entãovi.dvj.d quando vj entra na fila.

Teorema: Ao final da BFS, v.d =δ(s,v) para todo vV . Teorema: Ademais, para todo v alcançável de s com v,s, Teorema: um caminho mais curto de s a v consiste em um

Teorema: caminho mais curto de s aπ[v]seguido da arestaπ[v].v .

(14)

Algumas aplicações

•Determinar componentes conexas de um grafo Componentes conexas

Num grafo dizemos que um vérticeu é alcançável a partir de um vérticev se existe caminho de v a u.

I Num grafo dirigido, essa relação é transitiva e reflexiva.

I Num grafo não dirigido, ela é de equivalência. Os subgrafos induzidos pelas classes são as componentes conexas do grafo. Como achar as componentes?

Basta achar as classes.

BFS a partir de um vértice determina sua classe.

•Determinar se um grafo é bipartido

Análise de Algoritmos – 2º sem 2019 14 / 47

(15)

Algumas aplicações

•Determinar componentes conexas de um grafo Componentes conexas

Num grafo dizemos que um vérticeu é alcançável a partir de um vérticev se existe caminho de v a u.

I Num grafo dirigido, essa relação é transitiva e reflexiva.

I Num grafo não dirigido, ela é de equivalência. Os subgrafos induzidos pelas classes são as componentes conexas do grafo. Como achar as componentes?

Basta achar as classes.

BFS a partir de um vértice determina sua classe.

•Determinar se um grafo é bipartido

(16)

Algumas aplicações

•Determinar componentes conexas de um grafo Componentes conexas

Num grafo dizemos que um vérticeu é alcançável a partir de um vérticev se existe caminho de v a u.

I Num grafo dirigido, essa relação é transitiva e reflexiva.

I Num grafo não dirigido, ela é de equivalência. Os subgrafos induzidos pelas classes são as componentes conexas do grafo.

Como achar as componentes? Basta achar as classes.

BFS a partir de um vértice determina sua classe.

•Determinar se um grafo é bipartido

Análise de Algoritmos – 2º sem 2019 16 / 47

(17)

Algumas aplicações

•Determinar componentes conexas de um grafo Componentes conexas

Num grafo dizemos que um vérticeu é alcançável a partir de um vérticev se existe caminho de v a u.

I Num grafo dirigido, essa relação é transitiva e reflexiva.

I Num grafo não dirigido, ela é de equivalência. Os subgrafos induzidos pelas classes são as componentes conexas do grafo.

Como achar as componentes?

Basta achar as classes.

BFS a partir de um vértice determina sua classe.

•Determinar se um grafo é bipartido

(18)

Algumas aplicações

•Determinar componentes conexas de um grafo Componentes conexas

Num grafo dizemos que um vérticeu é alcançável a partir de um vérticev se existe caminho de v a u.

I Num grafo dirigido, essa relação é transitiva e reflexiva.

I Num grafo não dirigido, ela é de equivalência. Os subgrafos induzidos pelas classes são as componentes conexas do grafo.

Como achar as componentes?

Basta achar as classes.

BFS a partir de um vértice determina sua classe.

•Determinar se um grafo é bipartido

Análise de Algoritmos – 2º sem 2019 18 / 47

(19)

Algumas aplicações

•Determinar componentes conexas de um grafo Componentes conexas

Num grafo dizemos que um vérticeu é alcançável a partir de um vérticev se existe caminho de v a u.

I Num grafo dirigido, essa relação é transitiva e reflexiva.

I Num grafo não dirigido, ela é de equivalência. Os subgrafos induzidos pelas classes são as componentes conexas do grafo.

Como achar as componentes?

Basta achar as classes.

BFS a partir de um vértice determina sua classe.

•Determinar se um grafo é bipartido

(20)

Algumas aplicações

•Determinar componentes conexas de um grafo Componentes conexas

Num grafo dizemos que um vérticeu é alcançável a partir de um vérticev se existe caminho de v a u.

I Num grafo dirigido, essa relação é transitiva e reflexiva.

I Num grafo não dirigido, ela é de equivalência. Os subgrafos induzidos pelas classes são as componentes conexas do grafo.

Como achar as componentes?

Basta achar as classes.

BFS a partir de um vértice determina sua classe.

•Determinar se um grafo é bipartido

Análise de Algoritmos – 2º sem 2019 20 / 47

(21)

Grafo conexo

(22)

Grafos bipartidos

Um grafo ébipartido se é possível dividir seus vértices em duas classes de tal modo que cada aresta tem uma ponta em cada classe.

ALGORITMO- Decide se G (conexo) é bipartido

Faça uma BFS. Pequena alteração: Sev.d ==u.d, devolva NÃO. Se terminou, a bipartição é dada pela paridade do d. O algoritmo tem a mesma complexidade da BFS.

A corretude vem junto com o Teorema

Um grafo é bipartido se e só se não tem um circuito ímpar. Prova: Necessidade é fácil. Suficiência: modificar o algoritmo para devolver um circuito ímpar no caso NÃO.

Análise de Algoritmos – 2º sem 2019 22 / 47

(23)

Grafos bipartidos

Um grafo ébipartido se é possível dividir seus vértices em duas classes de tal modo que cada aresta tem uma ponta em cada classe.

ALGORITMO- Decide se G (conexo) é bipartido

Faça uma BFS. Pequena alteração: Sev.d ==u.d, devolva NÃO. Se terminou, a bipartição é dada pela paridade do d. O algoritmo tem a mesma complexidade da BFS.

A corretude vem junto com o Teorema

Um grafo é bipartido se e só se não tem um circuito ímpar. Prova: Necessidade é fácil. Suficiência: modificar o algoritmo para devolver um circuito ímpar no caso NÃO.

(24)

Grafos bipartidos

Um grafo ébipartido se é possível dividir seus vértices em duas classes de tal modo que cada aresta tem uma ponta em cada classe.

ALGORITMO- Decide se G (conexo) é bipartido

Faça uma BFS. Pequena alteração: Sev.d ==u.d, devolva NÃO.

Se terminou, a bipartição é dada pela paridade do d.

O algoritmo tem a mesma complexidade da BFS. A corretude vem junto com o

Teorema

Um grafo é bipartido se e só se não tem um circuito ímpar. Prova: Necessidade é fácil. Suficiência: modificar o algoritmo para devolver um circuito ímpar no caso NÃO.

Análise de Algoritmos – 2º sem 2019 24 / 47

(25)

Grafos bipartidos

Um grafo ébipartido se é possível dividir seus vértices em duas classes de tal modo que cada aresta tem uma ponta em cada classe.

ALGORITMO- Decide se G (conexo) é bipartido

Faça uma BFS. Pequena alteração: Sev.d ==u.d, devolva NÃO.

Se terminou, a bipartição é dada pela paridade do d. O algoritmo tem a mesma complexidade da BFS.

A corretude vem junto com o

Teorema

Um grafo é bipartido se e só se não tem um circuito ímpar. Prova: Necessidade é fácil. Suficiência: modificar o algoritmo para devolver um circuito ímpar no caso NÃO.

(26)

Grafos bipartidos

Um grafo ébipartido se é possível dividir seus vértices em duas classes de tal modo que cada aresta tem uma ponta em cada classe.

ALGORITMO- Decide se G (conexo) é bipartido

Faça uma BFS. Pequena alteração: Sev.d ==u.d, devolva NÃO.

Se terminou, a bipartição é dada pela paridade do d. O algoritmo tem a mesma complexidade da BFS.

A corretude vem junto com o Teorema

Um grafo é bipartido se e só se não tem um circuito ímpar.

Prova: Necessidade é fácil. Suficiência: modificar o algoritmo para devolver um circuito ímpar no caso NÃO.

Análise de Algoritmos – 2º sem 2019 26 / 47

(27)

Grafos bipartidos

Um grafo ébipartido se é possível dividir seus vértices em duas classes de tal modo que cada aresta tem uma ponta em cada classe.

ALGORITMO- Decide se G (conexo) é bipartido

Faça uma BFS. Pequena alteração: Sev.d ==u.d, devolva NÃO.

Se terminou, a bipartição é dada pela paridade do d. O algoritmo tem a mesma complexidade da BFS.

A corretude vem junto com o Teorema

Um grafo é bipartido se e só se não tem um circuito ímpar.

Prova: Necessidade é fácil. Suficiência: modificar o algoritmo para devolver um circuito ímpar no caso NÃO.

(28)

Grafos tripartidos

Um grafo étripartido se é possível dividir seus vértices em três classes de tal modo que cada aresta tenha as pontas em classes diferentes.

Exercício

Encontrar um algoritmo polinomial para decidir se um grafo é tripartido.

PRÊMIOS Nota A no curso PRÊMIO:+ Título de Doutor PRÊMIO:+ US$106

Análise de Algoritmos – 2º sem 2019 28 / 47

(29)

Grafos tripartidos

Um grafo étripartido se é possível dividir seus vértices em três classes de tal modo que cada aresta tenha as pontas em classes diferentes.

Exercício

Encontrar um algoritmo polinomial para decidir se um grafo é tripartido.

PRÊMIOS Nota A no curso PRÊMIO:+ Título de Doutor PRÊMIO:+ US$106

(30)

Grafos tripartidos

Um grafo étripartido se é possível dividir seus vértices em três classes de tal modo que cada aresta tenha as pontas em classes diferentes.

Exercício

Encontrar um algoritmo polinomial para decidir se um grafo é tripartido.

PRÊMIOS

Nota A no curso PRÊMIO:+ Título de Doutor PRÊMIO:+ US$106

Análise de Algoritmos – 2º sem 2019 30 / 47

(31)

Grafos tripartidos

Um grafo étripartido se é possível dividir seus vértices em três classes de tal modo que cada aresta tenha as pontas em classes diferentes.

Exercício

Encontrar um algoritmo polinomial para decidir se um grafo é tripartido.

PRÊMIOS Nota A no curso

PRÊMIO:+ Título de Doutor PRÊMIO:+ US$106

(32)

Grafos tripartidos

Um grafo étripartido se é possível dividir seus vértices em três classes de tal modo que cada aresta tenha as pontas em classes diferentes.

Exercício

Encontrar um algoritmo polinomial para decidir se um grafo é tripartido.

PRÊMIOS Nota A no curso PRÊMIO:+

Título de Doutor PRÊMIO:+ US$106

Análise de Algoritmos – 2º sem 2019 32 / 47

(33)

Grafos tripartidos

Um grafo étripartido se é possível dividir seus vértices em três classes de tal modo que cada aresta tenha as pontas em classes diferentes.

Exercício

Encontrar um algoritmo polinomial para decidir se um grafo é tripartido.

PRÊMIOS Nota A no curso PRÊMIO:+

Título de Doutor

PRÊMIO:+ US$106

(34)

Grafos tripartidos

Um grafo étripartido se é possível dividir seus vértices em três classes de tal modo que cada aresta tenha as pontas em classes diferentes.

Exercício

Encontrar um algoritmo polinomial para decidir se um grafo é tripartido.

PRÊMIOS Nota A no curso PRÊMIO:+

Título de Doutor PRÊMIO:+

US$106

Análise de Algoritmos – 2º sem 2019 34 / 47

(35)

Grafos tripartidos

Um grafo étripartido se é possível dividir seus vértices em três classes de tal modo que cada aresta tenha as pontas em classes diferentes.

Exercício

Encontrar um algoritmo polinomial para decidir se um grafo é tripartido.

PRÊMIOS Nota A no curso PRÊMIO:+

Título de Doutor PRÊMIO:+

US$106

(36)

Busca em profundidade

DFS

Outramoldura de algoritmos

que vão fazendo seu serviço enquanto percorrem o grafo.

Produz uma estrutura bem mais sofisticada que a BFS.

Análise de Algoritmos – 2º sem 2019 36 / 47

(37)

Busca em profundidade

DFS

Outramoldura de algoritmos

que vão fazendo seu serviço enquanto percorrem o grafo.

Produz uma estrutura bem mais sofisticada que a BFS.

(38)

Busca em profundidade - elementos

Vértice branco: ainda não descoberto

Vértice cinzento: descoberto, em processamento Vértice preto: processado

DFS termina descrevendo viaπ uma floresta DF (OuBP). u.π: predecessor ou pai deu na floresta DF

Faz duas marcas de tempo:

u.d: momento dadescobertadeu u.f: momento dafinalização deu u é branco antes deu.d,

u é cinzento entreu.d e u.f, u é preto depois deu.f.

Análise de Algoritmos – 2º sem 2019 38 / 47

(39)

Busca em profundidade - elementos

Vértice branco: ainda não descoberto

Vértice cinzento: descoberto, em processamento Vértice preto: processado

DFS termina descrevendo viaπ uma floresta DF (OuBP).

u.π: predecessor ou pai deu na floresta DF

Faz duas marcas de tempo:

u.d: momento dadescobertadeu u.f: momento dafinalização deu u é branco antes deu.d,

u é cinzento entreu.d e u.f, u é preto depois deu.f.

(40)

Busca em profundidade - elementos

Vértice branco: ainda não descoberto

Vértice cinzento: descoberto, em processamento Vértice preto: processado

DFS termina descrevendo viaπ uma floresta DF (OuBP).

u.π: predecessor ou pai deu na floresta DF Faz duas marcas de tempo:

u.d: momento dadescobertadeu u.f: momento dafinalização deu

u é branco antes deu.d, u é cinzento entreu.d e u.f, u é preto depois deu.f.

Análise de Algoritmos – 2º sem 2019 40 / 47

(41)

Busca em profundidade - elementos

Vértice branco: ainda não descoberto

Vértice cinzento: descoberto, em processamento Vértice preto: processado

DFS termina descrevendo viaπ uma floresta DF (OuBP).

u.π: predecessor ou pai deu na floresta DF Faz duas marcas de tempo:

u.d: momento dadescobertadeu u.f: momento dafinalização deu u é branco antes deu.d,

u é cinzento entreu.d e u.f, u é preto depois deu.f.

(42)

Busca em profundidade

DFS(G)

1 para cada uV(G) faça

2 u.cor←branco u.π←nil 3 tempo←0

4 para cada uV(G) faça 5 se u.cor=branco

6 então DFS-Visit(G,u)

DFS-Visit(G,u)

1 u.cor←cinzento u.d←tempo tempo←tempo+ 1 3 para cada vu.Estrela faça

4 se v.cor=branco 5 então v.πu

6 DFS-Visit(G,v)

7 u.cor←preto

8 u.f ←tempo tempo←tempo+ 1

Análise de Algoritmos – 2º sem 2019 42 / 47

(43)

Busca em profundidade

DFS(G)

1 para cada uV(G) faça

2 u.cor←branco u.π←nil 3 tempo←0

4 para cada uV(G) faça 5 se u.cor=branco

6 então DFS-Visit(G,u) DFS-Visit(G,u)

1 u.cor←cinzento u.d←tempo tempo←tempo+ 1 3 para cada vu.Estrela faça

4 se v.cor=branco 5 então v.πu

6 DFS-Visit(G,v)

7 u.cor←preto

8 u.f ←tempo tempo←tempo+ 1

(44)

Consumo de tempo

Cada vértice é descoberto uma única vez, pois é branco e, ao ser descoberto, passa a ser cinzento, e depois preto.

A lista de adjacência de cada vértice descoberto é percorrida uma única vez.

Logo o consumo de tempo éO(n+m), onden=|V|e m=|E|, pois

a inicialização custaÊ(n) e a soma do tamanho das listas de adjacências percorridas éO(m).

O consumo de tempo de uma DFS é linear no tamanho do grafo.

Análise de Algoritmos – 2º sem 2019 44 / 47

(45)

Consumo de tempo

Cada vértice é descoberto uma única vez, pois é branco e, ao ser descoberto, passa a ser cinzento, e depois preto.

A lista de adjacência de cada vértice descoberto é percorridauma única vez.

Logo o consumo de tempo éO(n+m), onden=|V|e m=|E|, pois

a inicialização custaÊ(n) e a soma do tamanho das listas de adjacências percorridas éO(m).

O consumo de tempo de uma DFS é linear no tamanho do grafo.

(46)

Consumo de tempo

Cada vértice é descoberto uma única vez, pois é branco e, ao ser descoberto, passa a ser cinzento, e depois preto.

A lista de adjacência de cada vértice descoberto é percorrida uma única vez.

Logo o consumo de tempo éO(n+m), onden=|V|e m=|E|, pois

a inicialização custaÊ(n) e a soma do tamanho das listas de adjacências percorridas éO(m).

O consumo de tempo de uma DFS é linear no tamanho do grafo.

Análise de Algoritmos – 2º sem 2019 46 / 47

(47)

Consumo de tempo

Cada vértice é descoberto uma única vez, pois é branco e, ao ser descoberto, passa a ser cinzento, e depois preto.

A lista de adjacência de cada vértice descoberto é percorrida uma única vez.

Logo o consumo de tempo éO(n+m), onden=|V|e m=|E|, pois

a inicialização custaÊ(n) e a soma do tamanho das listas de adjacências percorridas éO(m).

O consumo de tempo de uma DFS é linear no tamanho do grafo.

Referências

Documentos relacionados

[r]

uniformity (DU), percentage of acceptable spacing (AS), sowing depth (SD), disturbed soil area (DA), crop stand (CS), number of pods per plant (NP), number of grains per pod (NG)

Para cada cláusula o grafo G terá três vértices, um?. correspondente a cada literal

Um grafo (ou um grafo não orientado) G consiste de um conjunto V de vértices (ou nós) e um conjunto E de arestas (ou arcos) tal que cada aresta e ∈ ∈ E é associada com um par

Se a permanência no regime simplificado implica que os sujeitos passivos, no exercício da sua actividade, não tenham ultrapassado no período de tributação

O modelo Booleano baseia-se na combinação de vários mapas binários, em cada posição x,y para produzir um mapa final, no qual a classe 1 indica áreas que

• Def: Um grafo que possua a propriedade de ser possível dividir os vértices em dois conjuntos tais que todas as arestas apenas ligam vértices de um conjunto

A cada chamada de DFS-Visit no laço principal, os vértices lá processados fazem parte da componente cuja raiz é o argumento da chamada.. Se o grafo é