grafos - federal university of vale do são franciscomarcelo.linder/arquivos_aed2/aulas...grafos...

27
Grafos Os primeiros slides relacionados ao histórico dos grafos foram baseados nos slides do professor José Augusto Baranauskas do Departamento de Física e Matemática da Universidade de São Paulo – FFCLRP-USP. Grafos 407

Upload: others

Post on 28-Feb-2020

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Grafos - Federal University of Vale do São Franciscomarcelo.linder/arquivos_aed2/aulas...Grafos -Definições grafo. Note também que um nó não precisa ter arcos associados a ele

Grafos

Os primeiros slides relacionados ao histórico dos grafos forambaseados nos slides do professor José Augusto Baranauskas doDepartamento de Física e Matemática da Universidade de SãoPaulo – FFCLRP-USP.

Grafos

407

Page 2: Grafos - Federal University of Vale do São Franciscomarcelo.linder/arquivos_aed2/aulas...Grafos -Definições grafo. Note também que um nó não precisa ter arcos associados a ele

• A primeira evidência sobre grafos remonta a1736, quando Euler fez uso deles para solucionaro problema clássico das pontes de Koenigsberg;• Na cidade de Koenigsberg (na Prússia Oriental),o rio Pregal flui em torno da ilha de Kneiphof,dividindo-se em seguida em duas partes;• Assim sendo, existem quatro áreas de terra que

Grafos - Histórico

• Assim sendo, existem quatro áreas de terra queladeiam o rio: as áreas de terra (A-D) estãointerligadas por sete pontes (a-g);• O problema das pontes de Koenigsberg consisteem determinar se, ao partir de alguma área deterra, é possível atravessar todos as pontesexatamente uma vez, para, em seguida, retornarà área de terra inicial.

408

Page 3: Grafos - Federal University of Vale do São Franciscomarcelo.linder/arquivos_aed2/aulas...Grafos -Definições grafo. Note também que um nó não precisa ter arcos associados a ele

• É possível caminhar sobre cada ponte exatamenteuma única vez e retornar ao ponto de origem?

Grafos - Histórico

b

409

Page 4: Grafos - Federal University of Vale do São Franciscomarcelo.linder/arquivos_aed2/aulas...Grafos -Definições grafo. Note também que um nó não precisa ter arcos associados a ele

• Um caminho possível consistiria em iniciar na áreade terra B, atravessar a ponte a para a ilha A; pegara ponte e para chegar à área D, atravessar a ponteg, chegando a C; cruzar a ponte d até A; cruzar aponte b até B e a ponte f, chegando a D.

Grafos - Histórico

b

410

Page 5: Grafos - Federal University of Vale do São Franciscomarcelo.linder/arquivos_aed2/aulas...Grafos -Definições grafo. Note também que um nó não precisa ter arcos associados a ele

• Esse caminho não atravessa todas as pontesuma vez, nem tampouco retorna à área inicial deterra B.

• Euler provou que não é possível o povo deKoenigsberg atravessar cada ponte exatamente

Grafos - Histórico

Koenigsberg atravessar cada ponte exatamenteuma vez, retornando ao ponto inicial.

• Ele resolveu o problema, representando asáreas de terra como vértices e as pontes comoarestas de um grafo (na realidade, um multigrafo).

411

Page 6: Grafos - Federal University of Vale do São Franciscomarcelo.linder/arquivos_aed2/aulas...Grafos -Definições grafo. Note também que um nó não precisa ter arcos associados a ele

• Um grafo consiste num conjunto de nós (ouvértices) e num conjunto de arcos (ou arestas).• Cada arco num grafo é especificado por um parde nós.

Grafos - Definições

B

D E GA

• A sequência de nós é {A,B,C,D,E,F,G,H},e oconjunto de arcos é {(A,B), (A,D), (A,C), (C,D),(C,F), (E,G), (A,A)}.

C

D E G

HF

A

412

Page 7: Grafos - Federal University of Vale do São Franciscomarcelo.linder/arquivos_aed2/aulas...Grafos -Definições grafo. Note também que um nó não precisa ter arcos associados a ele

• Se os pares de nós que formam os arcos forempares ordenados, diz-se que o grafo é um grafoorientado (ou dígrafo). Exemplos:

Grafos - Definições

B

C

D E GA

• As setas entre os nós representam arcos. Aponta de cada seta representa o segundo nó nopar ordenado de nós que forma um arco, e o finalde cada seta representa o primeiro nó no par. Oconjunto de arcos do grafo acima é {<A,B>,<A,C>, <A,D>, <C,D>, <F,C>, <E,G>, <A,A>}.

C

HF

413

Page 8: Grafos - Federal University of Vale do São Franciscomarcelo.linder/arquivos_aed2/aulas...Grafos -Definições grafo. Note também que um nó não precisa ter arcos associados a ele

• Note que foram usados parênteses para indicarum par não-ordenado (desordenado) e chavesangulares para indicar um par ordenado.• Concentraremos inicialmente nosso estudo nosdígrafos.• Observe que, como vimos, um grafo não precisaser uma árvore, mas uma árvore tem de ser um

Grafos - Definições

ser uma árvore, mas uma árvore tem de ser umgrafo. Note também que um nó não precisa terarcos associados a ele (por exemplo, nó H nografo anterior).• Um nó n incide em um arco x se n for um deseus dois nós no par ordenado de nós queconstituem x. (Dizemos também que x incide emn.)

414

Page 9: Grafos - Federal University of Vale do São Franciscomarcelo.linder/arquivos_aed2/aulas...Grafos -Definições grafo. Note também que um nó não precisa ter arcos associados a ele

• O grau de um nó é o número de arcosincidentes nesse nó.• O grau de entrada de um nó n é o número dearcos que têm n como cabeça, e o grau de saídade n é o número de arcos que têm n comoterminação da seta.

Por exemplo, o nó C no grafo abaixo tem grau

Grafos - Definições

Por exemplo, o nó C no grafo abaixo tem graude entrada 2, grau de saída 1 e grau 3.

B

C

D E G

HF

A

415

Page 10: Grafos - Federal University of Vale do São Franciscomarcelo.linder/arquivos_aed2/aulas...Grafos -Definições grafo. Note também que um nó não precisa ter arcos associados a ele

• Um nó n será adjacente a um nó m se existir umarco de m até n. Se n for adjacente a m, n seráchamado sucessor de m e m será um predecessorde n.

• Uma relação R num conjunto A é uma sequênciade pares ordenados de elementos de A.

Por exemplo, se A = {3, 5, 6, 8, 10, 17}, o conjunto

Grafos - Definições

Por exemplo, se A = {3, 5, 6, 8, 10, 17}, o conjuntoR = {<3,10>, <5,6>, <5,8>, <6,17>, <8,17>, <10,17>}será uma relação. Se <x, y> for um membro de umarelação R, diz-se que x está relacionado a y em R.

A relação R anterior pode ser descrita dizendo-seque x está relacionado com y se x for menor que y eo resto obtido a partir da divisão de y por x for ímpar.

416

Page 11: Grafos - Federal University of Vale do São Franciscomarcelo.linder/arquivos_aed2/aulas...Grafos -Definições grafo. Note também que um nó não precisa ter arcos associados a ele

Uma relação pode ser representada por umgrafo no qual os nós representam o conjuntobásico e os arcos representam os paresordenados da relação.

O grafo abaixo representa a relação anterior.

Grafos - Definições

3 103

178

10

6

5

417

Page 12: Grafos - Federal University of Vale do São Franciscomarcelo.linder/arquivos_aed2/aulas...Grafos -Definições grafo. Note também que um nó não precisa ter arcos associados a ele

Um número pode ser associado a cada arco deum grafo, como no grafo abaixo.

Grafos - Definições

3

178

10

5

1

7

1

5

3

1

Neste grafo, o número associado a cada arco éo resto obtido da divisão do inteiro posicionado nacabeça do arco pelo inteiro posicionado em suaterminação. Um grafo desse tipo, no qual existeum número associado a cada arco, é chamadografo ponderado ou rede. O número associado aum arco é chamado peso.

6

5

418

Page 13: Grafos - Federal University of Vale do São Franciscomarcelo.linder/arquivos_aed2/aulas...Grafos -Definições grafo. Note também que um nó não precisa ter arcos associados a ele

Identificaremos várias operações primitivas queserão úteis ao lidar com grafos. A operaçãoligar(a,b) introduz um arco do nó a até o nó b seainda não existir um; ligarComPeso(a,b,x) insereum arco de a até b com peso x num grafoponderado; remover(a,b) e removerComPeso(a,b,x) eliminam um arco de a até b, caso exista

Grafos - Definições

(a,b,x) eliminam um arco de a até b, caso exista(removerComPeso define também x com seupeso). Embora possamos também acrescentar oueliminar nós de um grafo, discutiremos essaspossibilidades posteriormente. A funçãoadjacente(a,b) retorna true se b for adjacente a a,e false, caso contrário.

419

Page 14: Grafos - Federal University of Vale do São Franciscomarcelo.linder/arquivos_aed2/aulas...Grafos -Definições grafo. Note também que um nó não precisa ter arcos associados a ele

Um caminho de comprimento k do nó a ao nób é definido como uma sequência de k + 1 nós n1,n2,..., nk + 1, tal que n1 = a, nk + 1 = b eadjacente(ni, ni + 1) é true para todo i entre 1 e k.Se, para algum inteiro k, existir um caminho decomprimento k entre a e b, existirá um caminhode a até b.

Grafos - Definições

de a até b.Um caminho de um nó para si mesmo é

chamado ciclo.Se um grafo contiver um ciclo, ele será cíclico;

caso contrário, será acíclico.Um grafo acíclico orientado é chamado dag,

uma aglutinação das iniciais de directed acyclicgraph.

420

Page 15: Grafos - Federal University of Vale do São Franciscomarcelo.linder/arquivos_aed2/aulas...Grafos -Definições grafo. Note também que um nó não precisa ter arcos associados a ele

Uma análise do grafo abaixo possibilitaperceber a existência de:

Grafos - Definições

H

G CB

• um caminho de comprimento 1 de A até C;• dois caminhos de comprimento 2 de B até G;• e um caminho de comprimento 3 de A até F.

Note que não existe um caminho de B até C.Existem ciclos de B para B, de F para F e de H

para H.

DF AE

421

Page 16: Grafos - Federal University of Vale do São Franciscomarcelo.linder/arquivos_aed2/aulas...Grafos -Definições grafo. Note também que um nó não precisa ter arcos associados a ele

Com base no que foi exposto e considerandoque o número de nós no grafo seja constante, ouseja, os arcos podem ser acrescentados oueliminados, mas os nós não.

Que estrutura poderia ser utilizada para suarepresentação?

Grafos - Representação

Um vetor bidimensional.

Se considerarmos que os nós de um grafoserão numerados de 0 a MAXNODES - 1 enenhuma informação é atribuída (associada) aeles. Além disso, também consideraremos aexistência de arcos sem a associação de pesosou outras informações aos mesmos.

422

Page 17: Grafos - Federal University of Vale do São Franciscomarcelo.linder/arquivos_aed2/aulas...Grafos -Definições grafo. Note também que um nó não precisa ter arcos associados a ele

Exercício:Nesse caso, defina como um grafo poderia ser

declarado.

#define MAXNODES valorInteiroPositivo

int adj[MAXNODES][MAXNODES];

Grafos - Representação

int adj[MAXNODES][MAXNODES];

O valor de adj[i][j] será TRUE ou FALSE,dependendo de o nó j ser ou não adjacente ao nói. O vetor bidimensional adj[ ][ ] é chamado matrizde adjacência.

423

Page 18: Grafos - Federal University of Vale do São Franciscomarcelo.linder/arquivos_aed2/aulas...Grafos -Definições grafo. Note também que um nó não precisa ter arcos associados a ele

Exercício: Seguindo esta linha de raciocínio,defina uma representação mais completa para umgrafo.#define MAXNODES valorInteiroPositivostruct node {

/* informacao associada a cada noh */};

Grafos - Representação

};struct arc {

int adj;/* informacao associada a cada arco */

};struct graph {

struct node nodes[MAXNODES];struct arc arcs[MAXNODES][MAXNODES];

};struct graph g;

424

Page 19: Grafos - Federal University of Vale do São Franciscomarcelo.linder/arquivos_aed2/aulas...Grafos -Definições grafo. Note também que um nó não precisa ter arcos associados a ele

Onde, assim como na representação anterior,cada nó do grafo é representado por um inteiroentre 0 e MAXNODES - 1, e o campo vetor nodesrepresenta as informações associadas a cada nó.O campo vetor arcs é um vetor bidimensionalrepresentando todo possível par ordenado de nós.O valor de g.arcs[i][j].adj é TRUE ou FALSE,

Grafos - Representação

O valor de g.arcs[i][j].adj é TRUE ou FALSE,dependendo de o nó j ser ou não adjacente ao nói. Neste caso, o vetor bidimensional g.arcs[][].adj éa matriz de adjacência. No caso de um grafoponderado, cada arco poderá também receber aatribuição de informações.

425

Page 20: Grafos - Federal University of Vale do São Franciscomarcelo.linder/arquivos_aed2/aulas...Grafos -Definições grafo. Note também que um nó não precisa ter arcos associados a ele

Exercício: Considerando a representação de umgrafo apenas pela matriz de adjacência, ou seja,onde não serão atribuídos pesos e outrasinformação à arestas e nem informações ao nós.Implemente a operação ligar(a,b).

void ligar (int adj[][MAXNODES], int node1, int

Grafos - Representação

void ligar (int adj[][MAXNODES], int node1, int node2){

adj[node1][node2] = 1;}

426

Page 21: Grafos - Federal University of Vale do São Franciscomarcelo.linder/arquivos_aed2/aulas...Grafos -Definições grafo. Note também que um nó não precisa ter arcos associados a ele

Exercício: Considerando a representação de umgrafo em questão. Implemente a operaçãoremover (a,b).

void remover (int adj[][MAXNODES], int node1, int node2)

Grafos - Representação

node2){

adj[node1][node2] = 0;}

427

Page 22: Grafos - Federal University of Vale do São Franciscomarcelo.linder/arquivos_aed2/aulas...Grafos -Definições grafo. Note também que um nó não precisa ter arcos associados a ele

Exercício: Considerando a representação de umgrafo em questão. Implemente a operaçãoadjacente (a,b).

int adjacente (int adj[][MAXNODES], int node1, int node2)

Grafos - Representação

node2){

return adj[node1][node2];}

428

Page 23: Grafos - Federal University of Vale do São Franciscomarcelo.linder/arquivos_aed2/aulas...Grafos -Definições grafo. Note também que um nó não precisa ter arcos associados a ele

Exercício: Proponha uma estrutura capaz derepresentar um grafo ponderado com um númerofixo de nós.

#define MAXNODES valorInteiroPositivostruct arc {

Grafos - Representação

struct arc {int adj;int peso;

};struct arc g[MAXNODES][MAXNODES];

429

Page 24: Grafos - Federal University of Vale do São Franciscomarcelo.linder/arquivos_aed2/aulas...Grafos -Definições grafo. Note também que um nó não precisa ter arcos associados a ele

Exercício: Considerando a representação paraum grafo ponderado apresentada, implemente aoperação ligarP(...).

void ligarP (struct arc adj[][MAXNODES], int node1, int node2, int peso)

Grafos - Representação

int node1, int node2, int peso){

adj[node1][node2].adj = 1;adj[node1][node2].peso = peso;

}

430

Page 25: Grafos - Federal University of Vale do São Franciscomarcelo.linder/arquivos_aed2/aulas...Grafos -Definições grafo. Note também que um nó não precisa ter arcos associados a ele

Exercício: Considerando a representação paraum grafo ponderado apresentada, implemente aoperação removerP(...).

void removerP (struct arc adj[][MAXNODES], int node1, int node2, int peso)

Grafos - Representação

int node1, int node2, int peso){

adj[node1][node2].adj = 0;adj[node1][node2].peso = peso;

}

431

Page 26: Grafos - Federal University of Vale do São Franciscomarcelo.linder/arquivos_aed2/aulas...Grafos -Definições grafo. Note também que um nó não precisa ter arcos associados a ele

Exercício: Considerando a representação paraum grafo ponderado apresentada, implemente aoperação adjacenteP(...).

void adjacenteP (struct arc adj[][MAXNODES], int node1, int node2)

Grafos - Representação

int node1, int node2){

return adj[node1][node2].adj;}

432

Page 27: Grafos - Federal University of Vale do São Franciscomarcelo.linder/arquivos_aed2/aulas...Grafos -Definições grafo. Note também que um nó não precisa ter arcos associados a ele

Examinaremos agora um exemplo de aplicaçãode um grafo. Vamos supor o seguinte problema:Considerando a existência de n cidades.Considerando que alguns pares destas cidadespossuem estradas que as ligam. Determine se épossível sair de uma cidade A e chegar em uma

Grafos - Aplicação

possível sair de uma cidade A e chegar em umacidade B utilizando exatamente nr estradas.

Determine uma estratégia para solucionar oproblema apresentado.

433