MAC328 Algoritmos em Grafosam/328-12/aulas/aula-0412.pdfCalculando distâncias...

63
Calculando distâncias Problema: dados um digrafo G e um vértice s, determinar a distância de s aos demais vértices do digrafo Exemplo: para s =0 v 0 1 2 3 4 5 dist[v] 0 3 1 1 1 2 0 1 2 3 5 4 Algoritmos em Grafos — 1º sem 2012 1 / 113

Transcript of MAC328 Algoritmos em Grafosam/328-12/aulas/aula-0412.pdfCalculando distâncias...

Page 1: MAC328 Algoritmos em Grafosam/328-12/aulas/aula-0412.pdfCalculando distâncias Problema:dadosumdigrafoGeumvértices, determinaradistânciadesaosdemaisvérticesdo digrafo Exemplo:paras=0

Calculando distânciasProblema: dados um digrafo G e um vértice s,determinar a distância de s aos demais vértices dodigrafo

Exemplo: para s = 0v 0 1 2 3 4 5

dist[v] 0 3 1 1 1 2

0

12

3 5

4

Algoritmos em Grafos — 1º sem 2012 1 / 113

Page 2: MAC328 Algoritmos em Grafosam/328-12/aulas/aula-0412.pdfCalculando distâncias Problema:dadosumdigrafoGeumvértices, determinaradistânciadesaosdemaisvérticesdo digrafo Exemplo:paras=0

Busca em largura

A busca em largura (=breadth-first search search= BFS) começa por um vértice, digamos s,especificado pelo usuário.

O algoritmovisita s,depois visita vértices à distância 1 de s,depois visita vértices à distância 2 de s,depois visita vértices à distância 3 de s,e assim por diante

Algoritmos em Grafos — 1º sem 2012 2 / 113

Page 3: MAC328 Algoritmos em Grafosam/328-12/aulas/aula-0412.pdfCalculando distâncias Problema:dadosumdigrafoGeumvértices, determinaradistânciadesaosdemaisvérticesdo digrafo Exemplo:paras=0

Simulação

i 0 1 2 3 4 5q[i]

v 0 1 2 3 4 5dist[v]

0

12

3 5

4

Algoritmos em Grafos — 1º sem 2012 3 / 113

Page 4: MAC328 Algoritmos em Grafosam/328-12/aulas/aula-0412.pdfCalculando distâncias Problema:dadosumdigrafoGeumvértices, determinaradistânciadesaosdemaisvérticesdo digrafo Exemplo:paras=0

Simulação

i 0 1 2 3 4 5q[i]

v 0 1 2 3 4 5dist[v] 6 6 6 6 6 6

0

12

3 5

4

Algoritmos em Grafos — 1º sem 2012 4 / 113

Page 5: MAC328 Algoritmos em Grafosam/328-12/aulas/aula-0412.pdfCalculando distâncias Problema:dadosumdigrafoGeumvértices, determinaradistânciadesaosdemaisvérticesdo digrafo Exemplo:paras=0

Simulação

i 0 1 2 3 4 5q[i] 0

v 0 1 2 3 4 5dist[v] 6 6 6 6 6 6

0

12

3 5

4

Algoritmos em Grafos — 1º sem 2012 5 / 113

Page 6: MAC328 Algoritmos em Grafosam/328-12/aulas/aula-0412.pdfCalculando distâncias Problema:dadosumdigrafoGeumvértices, determinaradistânciadesaosdemaisvérticesdo digrafo Exemplo:paras=0

Simulação

i 0 1 2 3 4 5q[i] 0

v 0 1 2 3 4 5dist[v] 0 6 6 6 6 6

0

12

3 5

4

Algoritmos em Grafos — 1º sem 2012 6 / 113

Page 7: MAC328 Algoritmos em Grafosam/328-12/aulas/aula-0412.pdfCalculando distâncias Problema:dadosumdigrafoGeumvértices, determinaradistânciadesaosdemaisvérticesdo digrafo Exemplo:paras=0

Simulação

i 0 1 2 3 4 5q[i] 0 2

v 0 1 2 3 4 5dist[v] 0 6 1 6 6 6

0

12

3 5

4

Algoritmos em Grafos — 1º sem 2012 7 / 113

Page 8: MAC328 Algoritmos em Grafosam/328-12/aulas/aula-0412.pdfCalculando distâncias Problema:dadosumdigrafoGeumvértices, determinaradistânciadesaosdemaisvérticesdo digrafo Exemplo:paras=0

Simulação

i 0 1 2 3 4 5q[i] 0 2 3

v 0 1 2 3 4 5dist[v] 0 6 1 1 6 6

0

12

3 5

4

Algoritmos em Grafos — 1º sem 2012 8 / 113

Page 9: MAC328 Algoritmos em Grafosam/328-12/aulas/aula-0412.pdfCalculando distâncias Problema:dadosumdigrafoGeumvértices, determinaradistânciadesaosdemaisvérticesdo digrafo Exemplo:paras=0

Simulação

i 0 1 2 3 4 5q[i] 0 2 3 4

v 0 1 2 3 4 5dist[v] 0 6 1 1 1 6

0

12

3 5

4

Algoritmos em Grafos — 1º sem 2012 9 / 113

Page 10: MAC328 Algoritmos em Grafosam/328-12/aulas/aula-0412.pdfCalculando distâncias Problema:dadosumdigrafoGeumvértices, determinaradistânciadesaosdemaisvérticesdo digrafo Exemplo:paras=0

Simulação

i 0 1 2 3 4 5q[i] 0 2 3 4

v 0 1 2 3 4 5dist[v] 0 6 1 1 1 6

0

12

3 5

4

Algoritmos em Grafos — 1º sem 2012 10 / 113

Page 11: MAC328 Algoritmos em Grafosam/328-12/aulas/aula-0412.pdfCalculando distâncias Problema:dadosumdigrafoGeumvértices, determinaradistânciadesaosdemaisvérticesdo digrafo Exemplo:paras=0

Simulação

i 0 1 2 3 4 5q[i] 0 2 3 4

v 0 1 2 3 4 5dist[v] 0 6 1 1 1 6

0

12

3 5

4

Algoritmos em Grafos — 1º sem 2012 11 / 113

Page 12: MAC328 Algoritmos em Grafosam/328-12/aulas/aula-0412.pdfCalculando distâncias Problema:dadosumdigrafoGeumvértices, determinaradistânciadesaosdemaisvérticesdo digrafo Exemplo:paras=0

Simulação

i 0 1 2 3 4 5q[i] 0 2 3 4

v 0 1 2 3 4 5dist[v] 0 6 1 1 1 6

0

12

3 5

4

Algoritmos em Grafos — 1º sem 2012 12 / 113

Page 13: MAC328 Algoritmos em Grafosam/328-12/aulas/aula-0412.pdfCalculando distâncias Problema:dadosumdigrafoGeumvértices, determinaradistânciadesaosdemaisvérticesdo digrafo Exemplo:paras=0

Simulação

i 0 1 2 3 4 5q[i] 0 2 3 4

v 0 1 2 3 4 5dist[v] 0 6 1 1 1 6

0

12

3 5

4

Algoritmos em Grafos — 1º sem 2012 13 / 113

Page 14: MAC328 Algoritmos em Grafosam/328-12/aulas/aula-0412.pdfCalculando distâncias Problema:dadosumdigrafoGeumvértices, determinaradistânciadesaosdemaisvérticesdo digrafo Exemplo:paras=0

Simulação

i 0 1 2 3 4 5q[i] 0 2 3 4 5

v 0 1 2 3 4 5dist[v] 0 6 1 1 1 2

0

12

3 5

4

Algoritmos em Grafos — 1º sem 2012 14 / 113

Page 15: MAC328 Algoritmos em Grafosam/328-12/aulas/aula-0412.pdfCalculando distâncias Problema:dadosumdigrafoGeumvértices, determinaradistânciadesaosdemaisvérticesdo digrafo Exemplo:paras=0

Simulação

i 0 1 2 3 4 5q[i] 0 2 3 4 5

v 0 1 2 3 4 5dist[v] 0 6 1 1 1 2

0

12

3 5

4

Algoritmos em Grafos — 1º sem 2012 15 / 113

Page 16: MAC328 Algoritmos em Grafosam/328-12/aulas/aula-0412.pdfCalculando distâncias Problema:dadosumdigrafoGeumvértices, determinaradistânciadesaosdemaisvérticesdo digrafo Exemplo:paras=0

Simulação

i 0 1 2 3 4 5q[i] 0 2 3 4 5

v 0 1 2 3 4 5dist[v] 0 6 1 1 1 2

0

12

3 5

4

Algoritmos em Grafos — 1º sem 2012 16 / 113

Page 17: MAC328 Algoritmos em Grafosam/328-12/aulas/aula-0412.pdfCalculando distâncias Problema:dadosumdigrafoGeumvértices, determinaradistânciadesaosdemaisvérticesdo digrafo Exemplo:paras=0

Simulação

i 0 1 2 3 4 5q[i] 0 2 3 4 5

v 0 1 2 3 4 5dist[v] 0 6 1 1 1 2

0

12

3 5

4

Algoritmos em Grafos — 1º sem 2012 17 / 113

Page 18: MAC328 Algoritmos em Grafosam/328-12/aulas/aula-0412.pdfCalculando distâncias Problema:dadosumdigrafoGeumvértices, determinaradistânciadesaosdemaisvérticesdo digrafo Exemplo:paras=0

Simulação

i 0 1 2 3 4 5q[i] 0 2 3 4 5 1

v 0 1 2 3 4 5dist[v] 0 3 1 1 1 2

0

12

3 5

4

Algoritmos em Grafos — 1º sem 2012 18 / 113

Page 19: MAC328 Algoritmos em Grafosam/328-12/aulas/aula-0412.pdfCalculando distâncias Problema:dadosumdigrafoGeumvértices, determinaradistânciadesaosdemaisvérticesdo digrafo Exemplo:paras=0

Simulação

i 0 1 2 3 4 5q[i] 0 2 3 4 5 1

v 0 1 2 3 4 5dist[v] 0 3 1 1 1 2

0

12

3 5

4

Algoritmos em Grafos — 1º sem 2012 19 / 113

Page 20: MAC328 Algoritmos em Grafosam/328-12/aulas/aula-0412.pdfCalculando distâncias Problema:dadosumdigrafoGeumvértices, determinaradistânciadesaosdemaisvérticesdo digrafo Exemplo:paras=0

Simulação

i 0 1 2 3 4 5q[i] 0 2 3 4 5 1

v 0 1 2 3 4 5dist[v] 0 3 1 1 1 2

0

12

3 5

4

Algoritmos em Grafos — 1º sem 2012 20 / 113

Page 21: MAC328 Algoritmos em Grafosam/328-12/aulas/aula-0412.pdfCalculando distâncias Problema:dadosumdigrafoGeumvértices, determinaradistânciadesaosdemaisvérticesdo digrafo Exemplo:paras=0

Simulação

i 0 1 2 3 4 5q[i] 0 2 3 4 5 1

v 0 1 2 3 4 5dist[v] 0 3 1 1 1 2

0

12

3 5

4

Algoritmos em Grafos — 1º sem 2012 21 / 113

Page 22: MAC328 Algoritmos em Grafosam/328-12/aulas/aula-0412.pdfCalculando distâncias Problema:dadosumdigrafoGeumvértices, determinaradistânciadesaosdemaisvérticesdo digrafo Exemplo:paras=0

Simulação

i 0 1 2 3 4 5q[i] 0 2 3 4 5 1

v 0 1 2 3 4 5dist[v] 0 3 1 1 1 2

0

12

3 5

4

Algoritmos em Grafos — 1º sem 2012 22 / 113

Page 23: MAC328 Algoritmos em Grafosam/328-12/aulas/aula-0412.pdfCalculando distâncias Problema:dadosumdigrafoGeumvértices, determinaradistânciadesaosdemaisvérticesdo digrafo Exemplo:paras=0

DIGRAPHdist#define INFINITO G–>V /* ou maxV */static int dist[maxV];static Vertex parnt[maxV];void DIGRAPHdist (Digraph G, Vertex s) {1 Vertex v, w; link p;2 for (v = 0; v < G->V; v++)3 dist[v] = INFINITO;4 parnt[v] = -1;

}5 QUEUEinit(G->V);6 dist[s] = 0;7 parnt[s] = s;

Algoritmos em Grafos — 1º sem 2012 23 / 113

Page 24: MAC328 Algoritmos em Grafosam/328-12/aulas/aula-0412.pdfCalculando distâncias Problema:dadosumdigrafoGeumvértices, determinaradistânciadesaosdemaisvérticesdo digrafo Exemplo:paras=0

DIGRAPHdist8 QUEUEput(s);9 while (!QUEUEempty()) {

10 v = QUEUEget();11 for(p=G->adj[v];p!=NULL;p=p->next)12 if (dist[w=p->w] == INFINITO){13 dist[w] = dist[v] + 1;14 parnt[w] = v;15 QUEUEput(w);

}}

16 QUEUEfree();}

Algoritmos em Grafos — 1º sem 2012 24 / 113

Page 25: MAC328 Algoritmos em Grafosam/328-12/aulas/aula-0412.pdfCalculando distâncias Problema:dadosumdigrafoGeumvértices, determinaradistânciadesaosdemaisvérticesdo digrafo Exemplo:paras=0

1-Potenciais

Algoritmos em Grafos — 1º sem 2012 25 / 113

Page 26: MAC328 Algoritmos em Grafosam/328-12/aulas/aula-0412.pdfCalculando distâncias Problema:dadosumdigrafoGeumvértices, determinaradistânciadesaosdemaisvérticesdo digrafo Exemplo:paras=0

1-potenciaisUm 1-potencial é um vetor y indexado pelosvértices do digrafo tal que

y[w]− y[v] ≤ 1 para todo arco v-w

Exemplo:v 0 1 2 3 4 5

y[v] 1 1 1 1 1 1

0

12

3 5

4

Algoritmos em Grafos — 1º sem 2012 26 / 113

Page 27: MAC328 Algoritmos em Grafosam/328-12/aulas/aula-0412.pdfCalculando distâncias Problema:dadosumdigrafoGeumvértices, determinaradistânciadesaosdemaisvérticesdo digrafo Exemplo:paras=0

1-potenciaisUm 1-potencial é um vetor y indexado pelosvértices do digrafo tal que

y[w]− y[v] ≤ 1 para todo arco v-w

Exemplo:v 0 1 2 3 4 5

y[v] 1 2 2 1 1 2

0

12

3 5

4

Algoritmos em Grafos — 1º sem 2012 27 / 113

Page 28: MAC328 Algoritmos em Grafosam/328-12/aulas/aula-0412.pdfCalculando distâncias Problema:dadosumdigrafoGeumvértices, determinaradistânciadesaosdemaisvérticesdo digrafo Exemplo:paras=0

Propriedade dos 1-potenciaisLema da dualidade. Se y é um 1-potencial e P é umcaminho de s a t, então

y[t]− y[s] ≤ |P|

Exemplo:v 0 1 2 3 4 5

y[v] 6 6 6 7 7 7

0

12

3 5

4

Algoritmos em Grafos — 1º sem 2012 28 / 113

Page 29: MAC328 Algoritmos em Grafosam/328-12/aulas/aula-0412.pdfCalculando distâncias Problema:dadosumdigrafoGeumvértices, determinaradistânciadesaosdemaisvérticesdo digrafo Exemplo:paras=0

Conseqüência

Se P é um caminho de s a t e y é um 1-potencialtais que

|P| = y[t]− y[s],

então P é um caminho mínimo e y é um 1-potencialtal que y[t]− y[s] é máximo

Algoritmos em Grafos — 1º sem 2012 29 / 113

Page 30: MAC328 Algoritmos em Grafosam/328-12/aulas/aula-0412.pdfCalculando distâncias Problema:dadosumdigrafoGeumvértices, determinaradistânciadesaosdemaisvérticesdo digrafo Exemplo:paras=0

Exemplo

v 0 1 2 3 4 5y[v] 0 3 1 1 1 2

0

12

3 5

4

Algoritmos em Grafos — 1º sem 2012 30 / 113

Page 31: MAC328 Algoritmos em Grafosam/328-12/aulas/aula-0412.pdfCalculando distâncias Problema:dadosumdigrafoGeumvértices, determinaradistânciadesaosdemaisvérticesdo digrafo Exemplo:paras=0

InvariantesAbaixo está escrito y no papel de distNa linha 9 da função DIGRAPHdist valem asseguintes invariantes:

(i0) para cada arco v-w na arborescência BFS tem-seque y[w]− y[v] = 1;

(i1) parnt[s] = s e y[s] = 0;

(i2) para cada vértice v,y[v] 6= G->V⇔ parnt[v] 6= −1;

(i3) para cada vértice v, se parnt[v] 6= −1 entãoexiste um caminho de s a v na arborescênciaBFS.

Algoritmos em Grafos — 1º sem 2012 31 / 113

Page 32: MAC328 Algoritmos em Grafosam/328-12/aulas/aula-0412.pdfCalculando distâncias Problema:dadosumdigrafoGeumvértices, determinaradistânciadesaosdemaisvérticesdo digrafo Exemplo:paras=0

Invariantes (continuação)

Abaixo está escrito y no papel de distNa linha 9 da função DIGRAPHdist vale a seguinterelação invariante:

(i4) para cada arco v-w se

y[w]− y[v] > 1

então v está na fila.

Algoritmos em Grafos — 1º sem 2012 32 / 113

Page 33: MAC328 Algoritmos em Grafosam/328-12/aulas/aula-0412.pdfCalculando distâncias Problema:dadosumdigrafoGeumvértices, determinaradistânciadesaosdemaisvérticesdo digrafo Exemplo:paras=0

Correção de DIGRAPHdistInício da última iteração:

y é um 1-potencial, por (i4)se y[t] 6= G->V, então parnt[t] 6= −1 [(i2)].Logo, de (i3), segue que existe um st-caminho Pna arborescência BFS. (i0) e (i1) implicam que

|P| = y[t]− y[s] = y[t].

Da propriedade dos 1-potenciais, concluímos queP é um st-caminho de comprimento mínimose y[t] = G->V, então (i1) implica quey[t]− y[s] = G->V e da propriedade dos1-potenciais concluímos que não existe caminhode s a t no grafo

Conclusão: o algoritmo faz o que promete.Algoritmos em Grafos — 1º sem 2012 33 / 113

Page 34: MAC328 Algoritmos em Grafosam/328-12/aulas/aula-0412.pdfCalculando distâncias Problema:dadosumdigrafoGeumvértices, determinaradistânciadesaosdemaisvérticesdo digrafo Exemplo:paras=0

Teorema da dualidade

Da propriedade dos 1-potenciais (lema da dualidade)e da correção de DIGRAPHdist concluímos oseguinte:

Se s e t são vértices de um digrafo e t está aoalcance de s então

min{|P| : P é um st-caminho}= max{y[t]− y[s] : y é um 1-potencial}.

Algoritmos em Grafos — 1º sem 2012 34 / 113

Page 35: MAC328 Algoritmos em Grafosam/328-12/aulas/aula-0412.pdfCalculando distâncias Problema:dadosumdigrafoGeumvértices, determinaradistânciadesaosdemaisvérticesdo digrafo Exemplo:paras=0

Custos nos arcos

S 20.1

Algoritmos em Grafos — 1º sem 2012 35 / 113

Page 36: MAC328 Algoritmos em Grafosam/328-12/aulas/aula-0412.pdfCalculando distâncias Problema:dadosumdigrafoGeumvértices, determinaradistânciadesaosdemaisvérticesdo digrafo Exemplo:paras=0

Digrafos com custos nos arcos

Muitas aplicações associam um número a cada arcode um digrafoDiremos que esse número é o custo da arcoVamos supor que esses números são do tipo double

typedef struct {Vertex v;Vertex w;double cst;

} Arc;

Algoritmos em Grafos — 1º sem 2012 36 / 113

Page 37: MAC328 Algoritmos em Grafosam/328-12/aulas/aula-0412.pdfCalculando distâncias Problema:dadosumdigrafoGeumvértices, determinaradistânciadesaosdemaisvérticesdo digrafo Exemplo:paras=0

ARC

A função ARC recebe dois vértices v e w e um valorcst e devolve um arco com ponta inicial v e pontafinal w e custo cst

Arc ARC (Vertex v, Vertex w, double cst){

1 Arc e;2 e.v = v; e.w = w;3 e.cst = cst;4 return e;

}

Algoritmos em Grafos — 1º sem 2012 37 / 113

Page 38: MAC328 Algoritmos em Grafosam/328-12/aulas/aula-0412.pdfCalculando distâncias Problema:dadosumdigrafoGeumvértices, determinaradistânciadesaosdemaisvérticesdo digrafo Exemplo:paras=0

Matriz de adjacência

Matriz de adjacência indica a presença ausênciae custo dos arcos:

se v-w é um arco, adj[v][w] é seu custose v-w não é arco, adj[v][w] = maxCST

Exemplo:

0

1

2 3

0 1 2 30 ∗ .3 2 ∗1 ∗ ∗ ∗ .422 ∗ 1 ∗ .123 ∗ ∗ ∗ ∗

∗ indica maxCST

Algoritmos em Grafos — 1º sem 2012 38 / 113

Page 39: MAC328 Algoritmos em Grafosam/328-12/aulas/aula-0412.pdfCalculando distâncias Problema:dadosumdigrafoGeumvértices, determinaradistânciadesaosdemaisvérticesdo digrafo Exemplo:paras=0

Estrutura digraph

A estrutura digraph representa um digrafoadj é um ponteiro para a matriz de adjacênciaV contém o número de vérticesA contém o número de arcos do digrafo.

struct digraph {int V;int A;double **adj;

};

Algoritmos em Grafos — 1º sem 2012 39 / 113

Page 40: MAC328 Algoritmos em Grafosam/328-12/aulas/aula-0412.pdfCalculando distâncias Problema:dadosumdigrafoGeumvértices, determinaradistânciadesaosdemaisvérticesdo digrafo Exemplo:paras=0

Estrutura Digraph

Um objeto do tipo Digraph contém o endereço deum digraph

typedef struct digraph *Digraph;

Algoritmos em Grafos — 1º sem 2012 40 / 113

Page 41: MAC328 Algoritmos em Grafosam/328-12/aulas/aula-0412.pdfCalculando distâncias Problema:dadosumdigrafoGeumvértices, determinaradistânciadesaosdemaisvérticesdo digrafo Exemplo:paras=0

Digrafo

Digraph G

1

2

3

4

5

6

7

8

9

100

2

3

4

5

1

Algoritmos em Grafos — 1º sem 2012 41 / 113

Page 42: MAC328 Algoritmos em Grafosam/328-12/aulas/aula-0412.pdfCalculando distâncias Problema:dadosumdigrafoGeumvértices, determinaradistânciadesaosdemaisvérticesdo digrafo Exemplo:paras=0

Estruturas de dados

* * *

* * * *

5

5

* *

* * * *

* *

* * * * *

* *

1 3 2

6 7

8 9

10

* * *

*

4 5

6

10

1 432001234

G VAadj

Algoritmos em Grafos — 1º sem 2012 42 / 113

Page 43: MAC328 Algoritmos em Grafosam/328-12/aulas/aula-0412.pdfCalculando distâncias Problema:dadosumdigrafoGeumvértices, determinaradistânciadesaosdemaisvérticesdo digrafo Exemplo:paras=0

MATRIXdoubleAloca uma matriz com linhas 0..r-1 e colunas0..c-1, cada elemento da matriz recebe valor val

double **MATRIXdouble(int r, int c, double val) {

0 Vertex i, j;1 double **m = malloc(r*sizeof(double*));2 for (i = 0; i < r; i++)3 m[i] = malloc(c*sizeof(double));4 for (i = 0; i < r; i++)5 for (j = 0; j < c; j++)6 m[i][j] = val;7 return m;

}Algoritmos em Grafos — 1º sem 2012 43 / 113

Page 44: MAC328 Algoritmos em Grafosam/328-12/aulas/aula-0412.pdfCalculando distâncias Problema:dadosumdigrafoGeumvértices, determinaradistânciadesaosdemaisvérticesdo digrafo Exemplo:paras=0

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 = MATRIXdouble(V, V, maxCST);4 return G;

}

Algoritmos em Grafos — 1º sem 2012 44 / 113

Page 45: MAC328 Algoritmos em Grafosam/328-12/aulas/aula-0412.pdfCalculando distâncias Problema:dadosumdigrafoGeumvértices, determinaradistânciadesaosdemaisvérticesdo digrafo Exemplo:paras=0

DIGRAPHinsertAInsere um arco v-w de custo cst no digrafo GSe v==w ou o digrafo já tem arco v-w, não faz nada

voidDIGRAPHinsertA(Digraph G,Vertex v,Vertex w,

double cst){

if (v != w && G->adj[v][w] == maxCST) {G->adj[v][w] = cst;G->A++;

}}

Algoritmos em Grafos — 1º sem 2012 45 / 113

Page 46: MAC328 Algoritmos em Grafosam/328-12/aulas/aula-0412.pdfCalculando distâncias Problema:dadosumdigrafoGeumvértices, determinaradistânciadesaosdemaisvérticesdo digrafo Exemplo:paras=0

Vetor de listas de adjacência

A lista de adjacência de um vértice v é composta pornós do tipo nodeUm link é um ponteiro para um nodeCada nó da lista contém um vizinho w de v, o custodo arco v-w e o endereço do nó seguinte da lista

typedef struct node *link;struct node {

Vertex w;double cst;link next;

};Algoritmos em Grafos — 1º sem 2012 46 / 113

Page 47: MAC328 Algoritmos em Grafosam/328-12/aulas/aula-0412.pdfCalculando distâncias Problema:dadosumdigrafoGeumvértices, determinaradistânciadesaosdemaisvérticesdo digrafo Exemplo:paras=0

Digrafo

Digraph G

1

2

3

4

5

6

7

8

9

100

2

3

4

5

1

Algoritmos em Grafos — 1º sem 2012 47 / 113

Page 48: MAC328 Algoritmos em Grafosam/328-12/aulas/aula-0412.pdfCalculando distâncias Problema:dadosumdigrafoGeumvértices, determinaradistânciadesaosdemaisvérticesdo digrafo Exemplo:paras=0

Estruturas de dados

5

5

5

6

10

0123

G VAadj

44

4

4

11

1

2 31 23

4 56 7

8910

Algoritmos em Grafos — 1º sem 2012 48 / 113

Page 49: MAC328 Algoritmos em Grafosam/328-12/aulas/aula-0412.pdfCalculando distâncias Problema:dadosumdigrafoGeumvértices, determinaradistânciadesaosdemaisvérticesdo digrafo Exemplo:paras=0

Estrutura digraph

A estrutura digraph representa um digrafoV contém o número de vérticesA contém o número de arcos do digrafoadj é um ponteiro para vetor de listas de

adjacência

struct digraph {int V;int A;link *adj;

};

Algoritmos em Grafos — 1º sem 2012 49 / 113

Page 50: MAC328 Algoritmos em Grafosam/328-12/aulas/aula-0412.pdfCalculando distâncias Problema:dadosumdigrafoGeumvértices, determinaradistânciadesaosdemaisvérticesdo digrafo Exemplo:paras=0

Estrutura Digraph

Um objeto do tipo Digraph contém o endereço deum digraph

typedef struct digraph *Digraph;

Algoritmos em Grafos — 1º sem 2012 50 / 113

Page 51: MAC328 Algoritmos em Grafosam/328-12/aulas/aula-0412.pdfCalculando distâncias Problema:dadosumdigrafoGeumvértices, determinaradistânciadesaosdemaisvérticesdo digrafo Exemplo:paras=0

NEWNEW recebe um vértice w, um custo cst e o endereçonext de um nó e devolve o endereço x de um novonó com x->w=w, e x->cst=cst e x->next=next

link NEW (Vertex w, double cst, link next){

link x = malloc(sizeof *x);x->w = w;x->cst = cst;x->next = next;return x;

}

Algoritmos em Grafos — 1º sem 2012 51 / 113

Page 52: MAC328 Algoritmos em Grafosam/328-12/aulas/aula-0412.pdfCalculando distâncias Problema:dadosumdigrafoGeumvértices, determinaradistânciadesaosdemaisvérticesdo digrafo Exemplo:paras=0

DIGRAPHinitDevolve (o endereço de) um novo digrafo comvértices 0,..,V-1 e nenhum arco

Digraph DIGRAPHinit (int V) {0 Vertex v;1 Digraph G = malloc(sizeof *G);2 G->V = V;3 G->A = 0;4 G->adj = malloc(V * sizeof(link));5 for (v = 0; v < V; v++)6 G->adj[v] = NULL;7 return G;

}Algoritmos em Grafos — 1º sem 2012 52 / 113

Page 53: MAC328 Algoritmos em Grafosam/328-12/aulas/aula-0412.pdfCalculando distâncias Problema:dadosumdigrafoGeumvértices, determinaradistânciadesaosdemaisvérticesdo digrafo Exemplo:paras=0

DIGRAPHinsertAInsere um arco v-w de custo cst no digrafo G.Se v == w ou o digrafo já tem arco v-w;não faz nada

voidDIGRAPHinsertA(Digraph G,Vertex v,Vertex w,

double cst){

link p;if (v == w) return;for (p = G->adj[v];p != NULL;p = p->next)

if (p->w== w) return;G->adj[v] = NEW(w, cst, G->adj[v]);G->A++;

}Algoritmos em Grafos — 1º sem 2012 53 / 113

Page 54: MAC328 Algoritmos em Grafosam/328-12/aulas/aula-0412.pdfCalculando distâncias Problema:dadosumdigrafoGeumvértices, determinaradistânciadesaosdemaisvérticesdo digrafo Exemplo:paras=0

DIGRAPHinsertA

O código abaixo transfere a responsabilidade deevitar laços e arcos paralelos ao cliente/usuário

voidDIGRAPHinsertA (Digraph G,Vertex v,Vertex w,

double cst){

G->adj[v] = NEW(w,cst, G->adj[v]);G->A++;

}

Algoritmos em Grafos — 1º sem 2012 54 / 113

Page 55: MAC328 Algoritmos em Grafosam/328-12/aulas/aula-0412.pdfCalculando distâncias Problema:dadosumdigrafoGeumvértices, determinaradistânciadesaosdemaisvérticesdo digrafo Exemplo:paras=0

Caminhos de custo mínimo

S 21.0 e 21.1

Algoritmos em Grafos — 1º sem 2012 55 / 113

Page 56: MAC328 Algoritmos em Grafosam/328-12/aulas/aula-0412.pdfCalculando distâncias Problema:dadosumdigrafoGeumvértices, determinaradistânciadesaosdemaisvérticesdo digrafo Exemplo:paras=0

Custo de um caminhoCusto de um caminho é soma dos custos de seusarcosCusto do caminho 0-2-4-5 é 16.Custo do caminho 0-2-4-1-2-4-5 é 14.Custo do caminho 0-2-4-1-2-4-1-2-4-5 é 12.

35

6

15

9

1

3

0

2

3

4

5

−6

−2

1

Algoritmos em Grafos — 1º sem 2012 56 / 113

Page 57: MAC328 Algoritmos em Grafosam/328-12/aulas/aula-0412.pdfCalculando distâncias Problema:dadosumdigrafoGeumvértices, determinaradistânciadesaosdemaisvérticesdo digrafo Exemplo:paras=0

Caminho mínimoUm caminho P tem custo mínimo se o custo de Pé menor ou igual ao custo de todo caminho com amesma origem e término

O caminho 0-3-4-5-1-2 é mínimo, tem custo −1

6

1

0

2

3

4

5−2

1

4

2

−3

3−3

2

2

Algoritmos em Grafos — 1º sem 2012 57 / 113

Page 58: MAC328 Algoritmos em Grafosam/328-12/aulas/aula-0412.pdfCalculando distâncias Problema:dadosumdigrafoGeumvértices, determinaradistânciadesaosdemaisvérticesdo digrafo Exemplo:paras=0

Problema

Problema dos Caminhos Mínimos com Origem Fixa(Single-source Shortest Paths Problem):

Dado um vértice s de um digrafo com custosnão-negativos nos arcos, encontrar, paracada vértice t que pode ser alcançado a partirde s, um caminho mínimo simples de s a t.

Algoritmos em Grafos — 1º sem 2012 58 / 113

Page 59: MAC328 Algoritmos em Grafosam/328-12/aulas/aula-0412.pdfCalculando distâncias Problema:dadosumdigrafoGeumvértices, determinaradistânciadesaosdemaisvérticesdo digrafo Exemplo:paras=0

Exemplo

Entra:

0

2

3

4

5

1

7

3

5

1

1

3

2

3

0

5

Algoritmos em Grafos — 1º sem 2012 59 / 113

Page 60: MAC328 Algoritmos em Grafosam/328-12/aulas/aula-0412.pdfCalculando distâncias Problema:dadosumdigrafoGeumvértices, determinaradistânciadesaosdemaisvérticesdo digrafo Exemplo:paras=0

Exemplo

Sai:

0

2

3

4

5

1

7

3

5

1

1

3

2

3

0

5

Algoritmos em Grafos — 1º sem 2012 60 / 113

Page 61: MAC328 Algoritmos em Grafosam/328-12/aulas/aula-0412.pdfCalculando distâncias Problema:dadosumdigrafoGeumvértices, determinaradistânciadesaosdemaisvérticesdo digrafo Exemplo:paras=0

Arborescência de caminhos mínimosUma arborescência com raiz s é de caminhosmínimos (= shortest-paths tree = SPT ) se paratodo vértice t que pode ser alcançado a partir de s,

o único caminho de s a t na arborescência éum caminho mínimo

0

2

3

4

5

1

7

3

5

1

1

3

2

30

5

Algoritmos em Grafos — 1º sem 2012 61 / 113

Page 62: MAC328 Algoritmos em Grafosam/328-12/aulas/aula-0412.pdfCalculando distâncias Problema:dadosumdigrafoGeumvértices, determinaradistânciadesaosdemaisvérticesdo digrafo Exemplo:paras=0

Problema da SPTProblema: Dado um vértice s de um digrafo comcustos não-negativos nos arcos, encontrar umaSPT com raiz sEntra:

0

2

3

4

5

1

7

3

5

1

1

3

2

3

0

5

Algoritmos em Grafos — 1º sem 2012 62 / 113

Page 63: MAC328 Algoritmos em Grafosam/328-12/aulas/aula-0412.pdfCalculando distâncias Problema:dadosumdigrafoGeumvértices, determinaradistânciadesaosdemaisvérticesdo digrafo Exemplo:paras=0

Problema da SPTProblema: Dado um vértice s de um digrafo comcustos não-negativos nos arcos, encontrar umaSPT com raiz sSai:

0

2

3

4

5

1

7

3

5

1

1

3

2

3

0

5

Algoritmos em Grafos — 1º sem 2012 63 / 113