grafos - federal university of vale do são franciscomarcelo.linder/arquivos_aed2/aulas...grafos...
TRANSCRIPT
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
• 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
• É possível caminhar sobre cada ponte exatamenteuma única vez e retornar ao ponto de origem?
Grafos - Histórico
b
409
• 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
• 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
• 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
• 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
• 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
• 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
• 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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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