@let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf ·...
Transcript of @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf ·...
![Page 1: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/1.jpg)
Melhores momentos
AULA 1
![Page 2: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/2.jpg)
Digrafos
digrafo = de vértices e conjunto de arcosarco = par ordenado de vértices
Exemplo: v e w são vértices e v-w é um arco
b d
f
c
a
e
![Page 3: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/3.jpg)
Especi�cação
Digrafos podem ser especi�cados através de sua listade arcos
Exemplo:
b d
f
c
a
e
d-f
b-d
a-c
b-e
e-f
a-b
![Page 4: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/4.jpg)
Grafos
grafo = digrafo simétrico
aresta = par de arcos anti-paralelos
Exemplo: b-a e a-b formam uma aresta
e
f
db
a
c
![Page 5: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/5.jpg)
Grafos
Um grafo é um digrafo simétrico
Exemplo: representação usual
e
f
db
a
c
![Page 6: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/6.jpg)
Estrutura de dados
Vértices são representados por objetos do tipoVertex.Arcos sao representados por por objetos do tipo Arc
#de�ne Vertex int
typedef struct {Vertex v;
Vertex w;
} Arc;
![Page 7: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/7.jpg)
Grafos no computador
Usaremos duas representações clássicas:
I matriz de adjacência (agora)I vetor de listas de adjacência (próximas aulas)
![Page 8: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/8.jpg)
Matriz de adjacência de digrafo
Matriz de adjacência de um digrafo tem linhas ecolunas indexadas por vértices:
adj[v][w] = 1 se v-w é um arcoadj[v][w] = 0 em caso contrário
Exemplo:
0
1
2 3
0 1 2 3
0 0 1 1 01 0 0 0 12 0 1 0 13 0 0 0 0
Consumo de espaço: Θ(V2) fácil de implementar
![Page 9: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/9.jpg)
Estrutura digraph
V = número de vérticesA = número de arcosadj = ponteiro para a matriz de adjacência
struct digraph {int V;int A;int **adj;
};
typedef struct digraph *Digraph;
![Page 10: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/10.jpg)
Digrafo
Digraph G
0
2
4
3 5
1
![Page 11: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/11.jpg)
Estruturas de dados
1 10 010
0 0 0 0
0 1 0 0 1 0
5
5
0 0
1 1
1 1
1
0 0 0 0
0 0
0 0 0 0 0
0 0
6
10
1 4320
0
1
2
3
4
G V
A
adj
![Page 12: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/12.jpg)
MATRIXint
Aloca uma matriz com linhas 0..r-1 e colunas0..c-1, cada elemento da matriz recebe valor val
int **MATRIXint (int r, int c, int val) {0 Vertex i, j;
1 int **m = malloc(r * sizeof(int *));2 for (i = 0; i < r; i++)3 m[i] = malloc(c * sizeof(int));4 for (i = 0; i < r; i++)5 for (j = 0; j < c; j++)6 m[i][j] = val;7 return m;
}
![Page 13: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/13.jpg)
Consumo de tempo
linha número de execuções da linha
1 = 1 = Θ(1)2 = r + 1 = Θ(r)3 = r = Θ(r)4 = r + 1 = Θ(r)5 = r× (c + 1) = Θ(r c)6 = r× c = Θ(r c)
total Θ(1) + 3Θ(r) + 2Θ(r c)= Θ(r c)
![Page 14: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/14.jpg)
Conclusão
Supondo que o consumo de tempo da função malloc
é constante
O consumo de tempo da função MATRIXint éΘ(r c).
![Page 15: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/15.jpg)
DIGRAPHinit
Devolve (o endereço de) um novo digrafo comvértices 0,..,V-1 e nenhum arco.
Digraph DIGRAPHinit (int V) {0 Digraph G = malloc(sizeof *G);1 G�>V = V;
2 G�>A = 0;3 G�>adj = MATRIXint(V,V,0);4 return G;
}
![Page 16: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/16.jpg)
AULA 2
![Page 17: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/17.jpg)
Funções básicas (continuação)
S 17.3
![Page 18: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/18.jpg)
DIGRAPHinsertA
Insere um arco v-w no digrafo G.Se v == w ou o digrafo já tem arco v-w, não faz nada
void
DIGRAPHinsertA(Digraph G,Vertex v,Vertex w)
{
if (v != w && G�>adj[v][w] == 0) {G�>adj[v][w] = 1;G�>A++;
}
}
![Page 19: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/19.jpg)
DIGRAPHinsertA
Insere um arco v-w no digrafo G.Se v == w ou o digrafo já tem arco v-w, não faz nada
void
DIGRAPHinsertA(Digraph G,Vertex v,Vertex w){
if (v != w && G�>adj[v][w] == 0) {G�>adj[v][w] = 1;G�>A++;
}
}
![Page 20: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/20.jpg)
DIGRAPHremoveA
Remove do digrafo G o arco v-wSe não existe tal arco, a função nada faz.
void
DIGRAPHremoveA(Digraph G,Vertex v,Vertex w)
{
if (G�>adj[v][w] == 1) {G�>adj[v][w] = 0;G�>A��;
}
}
![Page 21: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/21.jpg)
DIGRAPHremoveA
Remove do digrafo G o arco v-wSe não existe tal arco, a função nada faz.
void
DIGRAPHremoveA(Digraph G,Vertex v,Vertex w){
if (G�>adj[v][w] == 1) {G�>adj[v][w] = 0;G�>A��;
}
}
![Page 22: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/22.jpg)
DIGRAPHshow
0
2
4
3 5
1
0: 2 3 4
1:
2: 1 4
3: 4 5
4: 1 5
5: 1
![Page 23: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/23.jpg)
DIGRAPHshowPara cada vértice v de G, imprime, em uma linha,os vértices adjacentes a v
void DIGRAPHshow (Digraph G) {
Vertex v, w;
1 for (v = 0; v < G�>V; v++) {2 printf("%2d:", v);3 for (w = 0; w < G�>V; w++)4 if (G�>adj[v][w] == 1)5 printf("%2d", w);6 printf("\n");
}}
![Page 24: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/24.jpg)
DIGRAPHshowPara cada vértice v de G, imprime, em uma linha,os vértices adjacentes a v
void DIGRAPHshow (Digraph G) {Vertex v, w;
1 for (v = 0; v < G�>V; v++) {2 printf("%2d:", v);3 for (w = 0; w < G�>V; w++)4 if (G�>adj[v][w] == 1)5 printf("%2d", w);6 printf("\n");
}}
![Page 25: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/25.jpg)
Consumo de tempo
linha número de execuções da linha
1 = V + 1 = Θ(V)2 = V = Θ(V)3 = V× (V + 1) = Θ(V2)4 = V× V = Θ(V2)5 ≤ V× V = O(V2)6 = V = Θ(V)
total 3Θ(V) + O(V2) + 3Θ(V2)= Θ(V2)
![Page 26: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/26.jpg)
Conclusão
O consumo de tempo da função DIGRAPHShow éΘ(V2).
![Page 27: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/27.jpg)
Funções básicas para grafos
#de�ne GRAPHinit DIGRAPHinit
#de�ne GRAPHshow DIGRAPHshow
Função que insere uma aresta v-w no grafo G
void
GRAPHinsertE (Graph G, Vertex v, Vertex w){
DIGRAPHinsertA(G, v, w);DIGRAPHinsertA(G, w, v);
}
Exercício. Escrever a função GRAPHremoveE
![Page 28: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/28.jpg)
Funções básicas para grafos
#de�ne GRAPHinit DIGRAPHinit
#de�ne GRAPHshow DIGRAPHshow
Função que insere uma aresta v-w no grafo G
void
GRAPHinsertE (Graph G, Vertex v, Vertex w)
{DIGRAPHinsertA(G, v, w);DIGRAPHinsertA(G, w, v);
}
Exercício. Escrever a função GRAPHremoveE
![Page 29: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/29.jpg)
Funções básicas para grafos
#de�ne GRAPHinit DIGRAPHinit
#de�ne GRAPHshow DIGRAPHshow
Função que insere uma aresta v-w no grafo G
void
GRAPHinsertE (Graph G, Vertex v, Vertex w){
DIGRAPHinsertA(G, v, w);DIGRAPHinsertA(G, w, v);
}
Exercício. Escrever a função GRAPHremoveE
![Page 30: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/30.jpg)
Caminhos em digrafos
S 17.1
![Page 31: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/31.jpg)
CaminhosUm caminho num digrafo é qualquer seqüência daforma v0�v1�v2�...�vk−1�vp, onde vk−1-vk é um arcopara k = 1, . . . , p.
Exemplo: 2-4-1-3-5-4-5 é um caminho com origem
2 é término 5
0
1 3
5
42
![Page 32: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/32.jpg)
Caminhos simples
Um caminho é simples se não tem vértices repetidos
Exemplo: 2-4-1-3-5 é um caminho simples de 2 a 5
0
3
5
4
1
2
![Page 33: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/33.jpg)
Procurando um caminho
Problema: dados um digrafo G e dois vértices s e tdecidir se existe um caminho de s a t
Exemplo: para s = 0 e t = 1 a resposta é SIM
0
2
3 5
1
4
![Page 34: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/34.jpg)
Procurando um caminho
Problema: dados um digrafo G e dois vértices s e tdecidir se existe um caminho de s a t
Exemplo: para s = 0 e t = 1 a resposta é SIM
0
2 1
53
4
![Page 35: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/35.jpg)
Procurando um caminho
Problema: dados um digrafo G e dois vértices s e tdecidir se existe um caminho de s a t
Exemplo: para s = 5 e t = 4 a resposta é NÃO
0
2
3 5
1
4
![Page 36: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/36.jpg)
DIGRAPHpath
Recebe um digrafo G e vértices s e t e devolve 1 seexiste um caminho de s a t ou devolve 0 em casocontrárioSupõe que o digrafo tem no máximo maxV vértices.
int DIGRAPHpath (Digraph G, Vertex s, Vertex t)
![Page 37: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/37.jpg)
Caminhos em digrafos
S 17.1
![Page 38: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/38.jpg)
CaminhosUm caminho num digrafo é qualquer seqüência daforma v0�v1�v2�...�vk−1�vp, onde vk−1-vk é um arcopara k = 1, . . . , p.
Exemplo: 2-4-1-3-5-4-5 é um caminho com origem
2 é término 5
0
1 3
5
42
![Page 39: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/39.jpg)
Caminhos simples
Um caminho é simples se não tem vértices repetidos
Exemplo: 2-4-1-3-5 é um caminho simples de 2 a 5
0
3
5
4
1
2
![Page 40: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/40.jpg)
Procurando um caminho
Problema: dados um digrafo G e dois vértices s e tdecidir se existe um caminho de s a t
Exemplo: para s = 0 e t = 1 a resposta é SIM
0
2
3 5
1
4
![Page 41: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/41.jpg)
Procurando um caminho
Problema: dados um digrafo G e dois vértices s e tdecidir se existe um caminho de s a t
Exemplo: para s = 0 e t = 1 a resposta é SIM
0
2 1
53
4
![Page 42: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/42.jpg)
Procurando um caminho
Problema: dados um digrafo G e dois vértices s e tdecidir se existe um caminho de s a t
Exemplo: para s = 5 e t = 4 a resposta é NÃO
0
2
3 5
1
4
![Page 43: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/43.jpg)
DIGRAPHpath
Recebe um digrafo G e vértices s e t e devolve 1 seexiste um caminho de s a t ou devolve 0 em casocontrárioSupõe que o digrafo tem no máximo maxV vértices.
int DIGRAPHpath (Digraph G, Vertex s, Vertex t)
![Page 44: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/44.jpg)
DIGRAPHpath(G,0,1)
0
12
3 5
4
![Page 45: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/45.jpg)
DIGRAPHpath(G,0,1)
0
12
3 5
4
![Page 46: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/46.jpg)
pathR(G,0)
0
12
3 5
4
![Page 47: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/47.jpg)
pathR(G,0)
0
12
3 5
4
![Page 48: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/48.jpg)
pathR(G,2)
0
12
3 5
4
![Page 49: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/49.jpg)
pathR(G,2)
0
12
3 5
4
![Page 50: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/50.jpg)
pathR(G,1)
0
12
3 5
4
![Page 51: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/51.jpg)
pathR(G,2)
0
12
3 5
4
![Page 52: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/52.jpg)
pathR(G,2)
0
12
3 5
4
![Page 53: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/53.jpg)
pathR(G,4)
0
12
3 5
4
![Page 54: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/54.jpg)
pathR(G,4)
0
12
3 5
4
![Page 55: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/55.jpg)
pathR(G,4)
0
12
3 5
4
![Page 56: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/56.jpg)
pathR(G,5)
0
12
3 5
4
![Page 57: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/57.jpg)
pathR(G,5)
0
12
3 5
4
![Page 58: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/58.jpg)
pathR(G,5)
0
12
3 5
4
![Page 59: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/59.jpg)
pathR(G,4)
0
12
3 5
4
![Page 60: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/60.jpg)
pathR(G,2)
0
12
3 5
4
![Page 61: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/61.jpg)
pathR(G,0)
0
12
3 5
4
![Page 62: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/62.jpg)
pathR(G,0)
0
12
3 5
4
![Page 63: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/63.jpg)
pathR(G,3)
0
12
3 5
4
![Page 64: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/64.jpg)
pathR(G,3)
0
12
3 5
4
![Page 65: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/65.jpg)
pathR(G,3)
0
12
3 5
4
![Page 66: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/66.jpg)
pathR(G,3)
0
12
3 5
4
![Page 67: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/67.jpg)
pathR(G,0)
0
12
3 5
4
![Page 68: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/68.jpg)
pathR(G,0)
0
12
3 5
4
![Page 69: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/69.jpg)
pathR(G,0)
0
12
3 5
4
![Page 70: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/70.jpg)
DIGRAPHpath(G,0,1)
0
12
3 5
4
![Page 71: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/71.jpg)
DIGRAPHpath(G,2,3)
0
12
3 5
4
![Page 72: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/72.jpg)
DIGRAPHpath(G,2,3)
0
12
3 5
4
![Page 73: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/73.jpg)
pathR(G,2)
0
12
3 5
4
![Page 74: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/74.jpg)
pathR(G,2)
0
12
3 5
4
![Page 75: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/75.jpg)
pathR(G,1)
0
12
3 5
4
![Page 76: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/76.jpg)
pathR(G,2)
0
12
3 5
4
![Page 77: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/77.jpg)
pathR(G,2)
0
12
3 5
4
![Page 78: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/78.jpg)
pathR(G,4)
0
12
3 5
4
![Page 79: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/79.jpg)
pathR(G,4)
0
12
3 5
4
![Page 80: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/80.jpg)
pathR(G,4)
0
12
3 5
4
![Page 81: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/81.jpg)
pathR(G,5)
0
12
3 5
4
![Page 82: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/82.jpg)
pathR(G,5)
0
12
3 5
4
![Page 83: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/83.jpg)
pathR(G,5)
0
12
3 5
4
![Page 84: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/84.jpg)
pathR(G,4)
0
12
3 5
4
![Page 85: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/85.jpg)
pathR(G,2)
0
12
3 5
4
![Page 86: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/86.jpg)
DIGRAPHpath(G,2,3)
0
12
3 5
4
![Page 87: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/87.jpg)
DIGRAPHpath
static int lbl[maxV];int DIGRAPHpath (Digraph G, Vertex s, Vertex t){
Vertex v;1 for (v = 0; v < G�>V; v++)2 lbl[v] = −1;3 pathR(G,s);
4 if (lbl[t] == −1) return 0;
5 else return 1;
}
![Page 88: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/88.jpg)
pathR
Visita todos os vértices que podem ser atingidos apartir de v
void pathR (Digraph G, Vertex v)
{Vertex w;
1 lbl[v] = 0;
2 for (w = 0; w < G�>V; w++)3 if (G�>adj[v][w] == 1)4 if (lbl[w] == −1)5 pathR(G, w);}
![Page 89: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/89.jpg)
pathR
Visita todos os vértices que podem ser atingidos apartir de v
void pathR (Digraph G, Vertex v){
Vertex w;1 lbl[v] = 0;
2 for (w = 0; w < G�>V; w++)3 if (G�>adj[v][w] == 1)4 if (lbl[w] == −1)5 pathR(G, w);}
![Page 90: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/90.jpg)
DIGRAPHpath(G,0,1)
0
2
4
3 5
10-2 pathR(G,2)
2-1 pathR(G,1)
2-4 pathR(G,4)
4-1
4-5 pathR(G,5)
5-1
0-3 pathR(G,3)
3-4
3-5
0-4
existe caminho
![Page 91: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/91.jpg)
DIGRAPHpath(G,2,3)
0
2
4
3 5
1
2-1 pathR(G,1)
2-4 pathR(G,4)
4-1
4-5 pathR(G,5)
5-1
nao existe caminho
![Page 92: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/92.jpg)
Consumo de tempo
Qual é o consumo de tempo da funçãoDIGRAPHpath?
linha número de execuções da linha
1 = V + 1 = Θ(V)2 = V = Θ(V)3 = 1 = ????4 = 1 = Θ(1)5 = 1 = Θ(1)
total = 2Θ(1) + 2Θ(V) + ???= Θ(V) + ????
![Page 93: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/93.jpg)
Consumo de tempo
Qual é o consumo de tempo da funçãoDIGRAPHpath?
linha número de execuções da linha
1 = V + 1 = Θ(V)2 = V = Θ(V)3 = 1 = ????4 = 1 = Θ(1)5 = 1 = Θ(1)
total = 2Θ(1) + 2Θ(V) + ???= Θ(V) + ????
![Page 94: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/94.jpg)
Conclusão
O consumo de tempo da função DIGRAPHpath éΘ(V) mais o consumo de tempo da função
PathR.
![Page 95: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/95.jpg)
Consumo de tempo
Qual é o consumo de tempo da função PathR?
linha número de execuções da linha
1 ≤ V = O(V)2 ≤ V× (V + 1) = O(V2)3 ≤ V× V = O(V2)4 ≤ V× V = O(V2)5 ≤ V− 1 = O(V)
total = 2O(V) + 3O(V2)= O(V2)
![Page 96: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/96.jpg)
Consumo de tempo
Qual é o consumo de tempo da função PathR?
linha número de execuções da linha
1 ≤ V = O(V)2 ≤ V× (V + 1) = O(V2)3 ≤ V× V = O(V2)4 ≤ V× V = O(V2)5 ≤ V− 1 = O(V)
total = 2O(V) + 3O(V2)= O(V2)
![Page 97: @let@token MAC0328 Algoritmos em Grafos - ime.usp.brcoelho/mac0328-2011/aulas/aula02.pdf · Estruturas de dados 0 00 1 1 1 0 0 0 0 0 1 0 0 1 0 5 5 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0](https://reader031.fdocumentos.tips/reader031/viewer/2022022715/5c13fae709d3f26c7c8d9446/html5/thumbnails/97.jpg)
Conclusão
O consumo de tempo da função PathR paramatriz de adjacência é O(V2).
O consumo de tempo da função DIGRAPHpath
para matriz de adjacência é O(V2).