![Page 1: @let@token MAC0328 Algoritmos em Grafoscoelho/mac0328-2011/aulas/aula07.pdf · 2011. 3. 30. · AULA 6. Busca DFS (CLRS) Vamos supor que nossos digrafos têm no máximo maxV vértices](https://reader036.vdocuments.com.br/reader036/viewer/2022070217/6122b6368289916cdf2395af/html5/thumbnails/1.jpg)
Melhores momentos
AULA 6
![Page 2: @let@token MAC0328 Algoritmos em Grafoscoelho/mac0328-2011/aulas/aula07.pdf · 2011. 3. 30. · AULA 6. Busca DFS (CLRS) Vamos supor que nossos digrafos têm no máximo maxV vértices](https://reader036.vdocuments.com.br/reader036/viewer/2022070217/6122b6368289916cdf2395af/html5/thumbnails/2.jpg)
Busca DFS (CLRS)
Vamos supor que nossos digrafos têm no máximomaxV vértices
#de�ne maxV 10000static int time, parnt[maxV], d[maxV],f[maxV];
DIGRAPHdfs visita todos os vértices e arcos dodigrafo G.A função registra em d[v] o 'momento' em que v foidescoberto e em f[v] o momento em que ele foicompletamente examinado
![Page 3: @let@token MAC0328 Algoritmos em Grafoscoelho/mac0328-2011/aulas/aula07.pdf · 2011. 3. 30. · AULA 6. Busca DFS (CLRS) Vamos supor que nossos digrafos têm no máximo maxV vértices](https://reader036.vdocuments.com.br/reader036/viewer/2022070217/6122b6368289916cdf2395af/html5/thumbnails/3.jpg)
Busca DFS (CLRS)
0
2
1
645
7
3
[2,5] [6,7]
[3,4]
[0,9]
[1,8]
[10,15]
[11,12] [13,14]
![Page 4: @let@token MAC0328 Algoritmos em Grafoscoelho/mac0328-2011/aulas/aula07.pdf · 2011. 3. 30. · AULA 6. Busca DFS (CLRS) Vamos supor que nossos digrafos têm no máximo maxV vértices](https://reader036.vdocuments.com.br/reader036/viewer/2022070217/6122b6368289916cdf2395af/html5/thumbnails/4.jpg)
DIGRAPHdfs
void DIGRAPHdfs (Digraph G) {Vertex v;
1 time = 0;2 for (v = 0; v < G�>V; v++) {3 d[v] = f[v] = -1;
4 parnt[v] = -1;
5 }6 for (v= 0; v < G�>V; v++)7 if (d[v] == -1) {8 parnt[v] = v;
9 dfsR(G, v),}
}
![Page 5: @let@token MAC0328 Algoritmos em Grafoscoelho/mac0328-2011/aulas/aula07.pdf · 2011. 3. 30. · AULA 6. Busca DFS (CLRS) Vamos supor que nossos digrafos têm no máximo maxV vértices](https://reader036.vdocuments.com.br/reader036/viewer/2022070217/6122b6368289916cdf2395af/html5/thumbnails/5.jpg)
dfsR
void dfsR (Digraph G, Vertex v) {link p;
Vertex w;
1 d[v] = time++;2 for (p = G�>adj[v]; p != NULL; p= p�>next)3 w = p�>w;
4 if (d[w] == -1) {5 parnt[w] = v;
6 dfsR(G, w);7 }8 f[v] = time++;}
![Page 6: @let@token MAC0328 Algoritmos em Grafoscoelho/mac0328-2011/aulas/aula07.pdf · 2011. 3. 30. · AULA 6. Busca DFS (CLRS) Vamos supor que nossos digrafos têm no máximo maxV vértices](https://reader036.vdocuments.com.br/reader036/viewer/2022070217/6122b6368289916cdf2395af/html5/thumbnails/6.jpg)
Classi�cação dos arcos
0
2
1
645
7
3
[2,5] [6,7]
[3,4]
[0,9]
[1,8]
[10,15]
[11,12] [13,14]
![Page 7: @let@token MAC0328 Algoritmos em Grafoscoelho/mac0328-2011/aulas/aula07.pdf · 2011. 3. 30. · AULA 6. Busca DFS (CLRS) Vamos supor que nossos digrafos têm no máximo maxV vértices](https://reader036.vdocuments.com.br/reader036/viewer/2022070217/6122b6368289916cdf2395af/html5/thumbnails/7.jpg)
Arcos de arborescência ou descendentesv-w é arco de arborescência ou descendente see somente se d[v] < d[w] < f[w] < f[v]
0
2
1
645
7
3
[2,5] [6,7]
[3,4]
[0,9]
[1,8]
[10,15]
[11,12] [13,14]
![Page 8: @let@token MAC0328 Algoritmos em Grafoscoelho/mac0328-2011/aulas/aula07.pdf · 2011. 3. 30. · AULA 6. Busca DFS (CLRS) Vamos supor que nossos digrafos têm no máximo maxV vértices](https://reader036.vdocuments.com.br/reader036/viewer/2022070217/6122b6368289916cdf2395af/html5/thumbnails/8.jpg)
Arcos de retornov-w é arco de retorno se e somente se
d[w] < d[v] < f[v] < f[w]
0
2
1
645
7
3
[2,5] [6,7]
[3,4]
[0,9]
[1,8]
[10,15]
[11,12] [13,14]
![Page 9: @let@token MAC0328 Algoritmos em Grafoscoelho/mac0328-2011/aulas/aula07.pdf · 2011. 3. 30. · AULA 6. Busca DFS (CLRS) Vamos supor que nossos digrafos têm no máximo maxV vértices](https://reader036.vdocuments.com.br/reader036/viewer/2022070217/6122b6368289916cdf2395af/html5/thumbnails/9.jpg)
Arcos cruzadosv-w é arco cruzado se e somente se
d[w] < f[w] < d[v] < f[v]
0
2
1
645
7
3
[2,5] [6,7]
[3,4]
[0,9]
[1,8]
[10,15]
[11,12] [13,14]
![Page 10: @let@token MAC0328 Algoritmos em Grafoscoelho/mac0328-2011/aulas/aula07.pdf · 2011. 3. 30. · AULA 6. Busca DFS (CLRS) Vamos supor que nossos digrafos têm no máximo maxV vértices](https://reader036.vdocuments.com.br/reader036/viewer/2022070217/6122b6368289916cdf2395af/html5/thumbnails/10.jpg)
Conclusões
v-w é:
I arco de arborescência se e somente sed[v] < d[w] < f[w] < f[v] e parnt[w] = v;
I arco descendente se e somente sed[v] < d[w] < f[w] < f[v] e parnt[w] 6= v;
I arco de retorno se e somente sed[w] < d[v] < f[v] < f[w];
I arco cruzado se e somente sed[w] < f[w] < d[v] < f[v];
![Page 11: @let@token MAC0328 Algoritmos em Grafoscoelho/mac0328-2011/aulas/aula07.pdf · 2011. 3. 30. · AULA 6. Busca DFS (CLRS) Vamos supor que nossos digrafos têm no máximo maxV vértices](https://reader036.vdocuments.com.br/reader036/viewer/2022070217/6122b6368289916cdf2395af/html5/thumbnails/11.jpg)
AULA 7
![Page 12: @let@token MAC0328 Algoritmos em Grafoscoelho/mac0328-2011/aulas/aula07.pdf · 2011. 3. 30. · AULA 6. Busca DFS (CLRS) Vamos supor que nossos digrafos têm no máximo maxV vértices](https://reader036.vdocuments.com.br/reader036/viewer/2022070217/6122b6368289916cdf2395af/html5/thumbnails/12.jpg)
Ciclos em digrafos
![Page 13: @let@token MAC0328 Algoritmos em Grafoscoelho/mac0328-2011/aulas/aula07.pdf · 2011. 3. 30. · AULA 6. Busca DFS (CLRS) Vamos supor que nossos digrafos têm no máximo maxV vértices](https://reader036.vdocuments.com.br/reader036/viewer/2022070217/6122b6368289916cdf2395af/html5/thumbnails/13.jpg)
CiclosUm ciclo num digrafo é qualquer seqüência da formav0�v1�v2�...�vk−1�vp, onde vk−1-vk é um arco parak = 1, . . . , p e v0 = vp.
Exemplo: 2-1-5-3-4-2 é um ciclo
0
12
3 5
4
![Page 14: @let@token MAC0328 Algoritmos em Grafoscoelho/mac0328-2011/aulas/aula07.pdf · 2011. 3. 30. · AULA 6. Busca DFS (CLRS) Vamos supor que nossos digrafos têm no máximo maxV vértices](https://reader036.vdocuments.com.br/reader036/viewer/2022070217/6122b6368289916cdf2395af/html5/thumbnails/14.jpg)
Procurando um ciclo
Problema: decidir se dado digrafo G possui um ciclo
Exemplo: para o grafo a seguir a resposta é SIM
0
12
3 5
4
![Page 15: @let@token MAC0328 Algoritmos em Grafoscoelho/mac0328-2011/aulas/aula07.pdf · 2011. 3. 30. · AULA 6. Busca DFS (CLRS) Vamos supor que nossos digrafos têm no máximo maxV vértices](https://reader036.vdocuments.com.br/reader036/viewer/2022070217/6122b6368289916cdf2395af/html5/thumbnails/15.jpg)
Procurando um ciclo
Problema: decidir se dado digrafo G possui um ciclo
Exemplo: para o grafo a seguir a resposta é SIM
0
12
3 5
4
![Page 16: @let@token MAC0328 Algoritmos em Grafoscoelho/mac0328-2011/aulas/aula07.pdf · 2011. 3. 30. · AULA 6. Busca DFS (CLRS) Vamos supor que nossos digrafos têm no máximo maxV vértices](https://reader036.vdocuments.com.br/reader036/viewer/2022070217/6122b6368289916cdf2395af/html5/thumbnails/16.jpg)
Procurando um ciclo
Problema: decidir se dado digrafo G possui um ciclo
Exemplo: para o grafo a seguir a resposta é NÃO
0
12
3 5
4
![Page 17: @let@token MAC0328 Algoritmos em Grafoscoelho/mac0328-2011/aulas/aula07.pdf · 2011. 3. 30. · AULA 6. Busca DFS (CLRS) Vamos supor que nossos digrafos têm no máximo maxV vértices](https://reader036.vdocuments.com.br/reader036/viewer/2022070217/6122b6368289916cdf2395af/html5/thumbnails/17.jpg)
DIGRAPHcycle1
Recebe um digrafo G e devolve 1 se existe um cicloem G e devolve 0 em caso contrárioSupõe que o digrafo tem no máximo maxV vértices.
int DIGRAPHcycle1 (Digraph G);
![Page 18: @let@token MAC0328 Algoritmos em Grafoscoelho/mac0328-2011/aulas/aula07.pdf · 2011. 3. 30. · AULA 6. Busca DFS (CLRS) Vamos supor que nossos digrafos têm no máximo maxV vértices](https://reader036.vdocuments.com.br/reader036/viewer/2022070217/6122b6368289916cdf2395af/html5/thumbnails/18.jpg)
Primeiro algoritmo
int DIGRAPHcycle1 (Digraph G) {Vertex v;
link p;
int output;1 for (v = 0; v < G�>V; v++)2 for (p=G->adj[v];p!= NULL;p=p->next)
{3 output = DIGRAPHpath(G, p�>w, v);4 if (output == 1) return 1;
}5 return 0;}
![Page 19: @let@token MAC0328 Algoritmos em Grafoscoelho/mac0328-2011/aulas/aula07.pdf · 2011. 3. 30. · AULA 6. Busca DFS (CLRS) Vamos supor que nossos digrafos têm no máximo maxV vértices](https://reader036.vdocuments.com.br/reader036/viewer/2022070217/6122b6368289916cdf2395af/html5/thumbnails/19.jpg)
Consumo de tempo
O consumo de tempo da função DIGRAPHcycle1
é A vezes o consumo de tempo da funçãoDIGRAPHpath.
O consumo de tempo da função DIGRAPHcycle1
para vetor de listas de adjacência é O(A(V+ A)).
O consumo de tempo da função DIGRAPHcicle1
para matriz de adjacência é O(AV2).
![Page 20: @let@token MAC0328 Algoritmos em Grafoscoelho/mac0328-2011/aulas/aula07.pdf · 2011. 3. 30. · AULA 6. Busca DFS (CLRS) Vamos supor que nossos digrafos têm no máximo maxV vértices](https://reader036.vdocuments.com.br/reader036/viewer/2022070217/6122b6368289916cdf2395af/html5/thumbnails/20.jpg)
DIGRAPHcycle
Vamos supor que nossos digrafos têm no máximomaxV vértices
#de�ne maxV 10000static int time, d[maxV], f[maxV];static Vertex parnt[maxV];
![Page 21: @let@token MAC0328 Algoritmos em Grafoscoelho/mac0328-2011/aulas/aula07.pdf · 2011. 3. 30. · AULA 6. Busca DFS (CLRS) Vamos supor que nossos digrafos têm no máximo maxV vértices](https://reader036.vdocuments.com.br/reader036/viewer/2022070217/6122b6368289916cdf2395af/html5/thumbnails/21.jpg)
DIGRAPHcycle
Recebe um digrafo G e devolve 1 se existe um cicloem G e devolve 0 em caso contrário
int DIGRAPHcycle (Digraph G);
A função tem por base a seguinte observação: emrelação a qualquer �oresta de busca emprofundidade,
todo arco de retorno pertence a um ciclo e
todo ciclo tem um arco de retorno
![Page 22: @let@token MAC0328 Algoritmos em Grafoscoelho/mac0328-2011/aulas/aula07.pdf · 2011. 3. 30. · AULA 6. Busca DFS (CLRS) Vamos supor que nossos digrafos têm no máximo maxV vértices](https://reader036.vdocuments.com.br/reader036/viewer/2022070217/6122b6368289916cdf2395af/html5/thumbnails/22.jpg)
Arcos de retornov-w é arco de retorno se e somente se
d[w] < d[v] < f[v] < f[w]
0
2
1
645
7
3
[2,5] [6,7]
[3,4]
[0,9]
[1,8]
[10,15]
[11,12] [13,14]
![Page 23: @let@token MAC0328 Algoritmos em Grafoscoelho/mac0328-2011/aulas/aula07.pdf · 2011. 3. 30. · AULA 6. Busca DFS (CLRS) Vamos supor que nossos digrafos têm no máximo maxV vértices](https://reader036.vdocuments.com.br/reader036/viewer/2022070217/6122b6368289916cdf2395af/html5/thumbnails/23.jpg)
DIGRAPHcycle
int DIGRAPHcycle (Digraph G) {Vertex v;
1 time = 0;2 for (v = 0; v < G�>V; v++) {3 d[v] = f[v] = -1; parnt[v] = -1;
4 }5 for (v= 0; v < G�>V,v++)6 if (d[v] == -1) {7 parnt[v] = v;
8 if (cycleR(G,v) == 1) return 1;}
9 return 0;}
![Page 24: @let@token MAC0328 Algoritmos em Grafoscoelho/mac0328-2011/aulas/aula07.pdf · 2011. 3. 30. · AULA 6. Busca DFS (CLRS) Vamos supor que nossos digrafos têm no máximo maxV vértices](https://reader036.vdocuments.com.br/reader036/viewer/2022070217/6122b6368289916cdf2395af/html5/thumbnails/24.jpg)
cycleR
int cycleR (Digraph G, Vertex v) {link p; Vertex w;
1 d[v] = time++;2 for (p = G�>adj[v]; p != NULL; p= p�>next)3 w= p�>w;
4 if (d[w] == -1) {4 parnt[w] = v;
5 if (cycleR(G,w)==1) return 1;}
6 else if (f[w] == -1) return 1;7 f[v] = time++;8 return 0;}
![Page 25: @let@token MAC0328 Algoritmos em Grafoscoelho/mac0328-2011/aulas/aula07.pdf · 2011. 3. 30. · AULA 6. Busca DFS (CLRS) Vamos supor que nossos digrafos têm no máximo maxV vértices](https://reader036.vdocuments.com.br/reader036/viewer/2022070217/6122b6368289916cdf2395af/html5/thumbnails/25.jpg)
Consumo de tempo
O consumo de tempo da função DIGRAPHcycle
para vetor de listas de adjacência é O(V+ A).
O consumo de tempo da função DIGRAPHcycle
para matriz de adjacência é O(V2).