Você está na página 1de 30

Exerccios PAA- Grafos

Eduardo Laber

Exerccio de Implementao

1. Modifique o cdigo da BFS para que esta preencha um vetor d com n


entradas aonde d(u) a distncia da origem s at o vrtice u.
for every vertex v of G not explored yet
d(v) infinito
End For
2
d(s) 0
3
mark vertex s as visited
4
while S is not empty do
5
u Dequeue(S);
6
For each v in Adj[u] then
7
if v is unexplored then
8
mark vertex v as visited
9
d(v) d(u)+1
10
Enqueue(S,v)
2

Cap 3-Tardos
Exerccio 2
Modifique o pseudo-cdigo da busca em
profundidade da seguinte forma.
Ao visitar um vrtice v a partir de u
Se v no foi visitado faa
upai (v)

Se v j foi visitado
Se v<> pai(u)
Ciclo existe (uv+ caminho de u a v na rvore)

Cap 3-Tardos
Exercicio 2: Ciclo em grafo direcionado

Execute uma busca em profundidade no grafo anotando, para cada


vrtice v,
o pai de v
o momento que a busca em v comea: pre(v)
o momento que a busca em v termina: pos(v)

Ao tentar visitar um vrtice v a partir de u tal que a busca em v j


comeou mais ainda no terminou (pos(v) =-1) podemos obter um
ciclo da seguinte forma.
Caminhe pelos pais de u at encontrar v. O ciclo formado por este
caminho + o arco (u,v)

Cap 3-Tardos
Exerccio 3

Execute uma ordenao topolgica no Grafo. Se em algum ponto


no houver uma fonte, quer dizer que o grafo contm ciclos.

Execute o algoritmo do slide anterior

Cap 3-Tardos
Exerccio 4
Etapa 1. Construa o grafo G[S] induzido pelas
arestas do conjunto S. Utilize uma DFS(BFS) para
determinar as componentes conexas deste grafo.
Atribua o nmero da componente para cada vrtice
(borboleta).
Etapa 2. Faa uma varredura nos pares (i,j) tal que a
borboleta i diferente da borboleta j. Se algum par
(i, j) for encontrado tal que a borboleta i est na
mesma componente de j (conforme etapa 1) ento a
atribuio inconsistente. Se nenhum par for
encontrado a atribuio consistente.
O(m+n)

Cap 3-Tardos
Exerccio 7
Seja v um n do grafo. Se u no vizinho
de v ento existe um n, digamos w, que
vizinho de u e de v. Caso contrrio o
grafo teria mais de n vrtices (n/2 vizinhos
de u, n/2 outros vizinhos de v, u e v).
Contradio
Portanto, vwu um caminho de v
para u

Cap 3-Tardos
Exerccio 8
Para um contra exemplo considere uma
clique K com n- n0.5 e um nico vrtice
desta clique ligado a um caminho de n 0.5
vrtices.

Cap 3-Tardos
Exerccio 9
Considerar a rvore gerada a partir de
uma busca em largura comeando em s.
Como a altura desta rvore maior que n/2
ento existe um nvel nesta rvore ( > 1 e <
nvel t) com apenas um n.
Como toda aresta de G liga vrtices da
mesma camada ou de camadas adjacentes,
ao remover este vrtice desconectamos o
grafo.

Cap 3-Tardos
Exerccio 9
Algoritmo
Faa uma busca em largura calculando a
distncia de s a cada n e preencha um vetor
(de listas) indicando, na posio i, os vrtices
que distam i de s. Retorne o primeiro n
diferente de s que se encontra sozinho em
uma lista

Cap 3-Tardos
Exerccio 10
Utilizar uma busca em largura para decompor a
rvore em camadas. Marcar para cada n u a
sua distncia ao n de origem v.
Em uma segunda passada acumular em cada
n u um contador num(u) indicando o nmero de
caminhos de v a u.
Inicialmente os contadores so 0, exceto Num(v)=1.
Ao tentar visitar um n y, com d(y)=i+1, a partir de um
n x, com d(x)=i, fazer
num(y) num(y)+num(x)

Cap 3-Tardos
Exerccio 12
Construa um grafo direcionados G da seguinte forma
a) Para cada pessoa P(i) crie dois vrtices: B(i) data de
nascimento e D(i), data de morte
b) Para todo i, crie uma arco de B(i) para D(i)
c) Se nos dados coletados, P(i) morre antes de P(j) nascer
crie um arco de D(i) para B(j)
d) Se nos dados coletados, a vida de P(i) tem interseo
com a vida de P(j), crie um arco de P(i) para B(j) e um
arco de B(i) para P(j)
Se G tem uma ordenao topolgica os dados so
consistentes, caso contrrio no

Dasgupta-Cap 3
Exerccio 8
Criamos 11*8*5=440 ns e associamos
cada n do grafo a uma tripla (a,b,c)
correspondendo a quantidade de gua em
cada um dos recipientes.
. Existe uma aresta direcionado de um n
para outro se for possivel de um estado
alcancar o outro com um movimento.

Dasgupta-Cap 3
Exerccio 8
Cada n pode ter 6 arestas partindo dele,
logo o nmero de arestas no mximo
1320

Dasgupta-Cap 3
Exerccio 8
Basta executar uma BFS(DFS) no grafo
comeando no estado (0,7,4) e verificar
se o estado (0,0,0) e alcanvel

Dasgupta-Cap 3
Exerccio 9
Duas passadas completas na lista de
adjacncia do grafo
A primeira passada calcula o grau de cada vrtice
For each v in Adj[u]
degree(u) degree(u)+1

Na segunda, acumulamos em twodegree[u], para


cada u, a soma dos graus dos vizinhos de u.
For each v in Adj[u]
Twodegree[u] Twodegree[u]+d(v)

Dasgupta-Cap 3
Exerccio 13
a) Defina um vrtice s em G e execute uma
DFS a partir de s. Seja T a rvore obtida.
Qualquer folha de T satisfaz a
propriedade desejada
b) Qualquer Ciclo direcionado
c) G= dois ciclos disjuntos

Dasgupta-Cap 3
Exerccio 15
a) Seja G=(V,E) o grafo direcionado em
que V o conjunto de intersees de
ruas e E representa o conjunto das ruas
Verifique se o grafo fortemente conexo
utilizando o algoritmo ensinado em sala
com complexidade O(m+n)

Dasgupta-Cap 3
Exerccio 15
b) Seja v o n correspondente a Town Hall. Seja
S o conjunto de n alcanveis a partir de v. S
pode ser obtido em O(m+n) atravs de uma
DFS( BFS).
Seja G o grafo reverso de G. Seja T o conjunto
de ns obtidos a partir de v em G. Se S for um
subconjunto de T ento a propriedade
verdadeira. Caso contrrio, falsa. Podemos
testar se S e subconjunto de T em O(n)

Dasgupta-Cap 3
Exerccio 18
Execute uma DFS em G a partir de r e
armazene os contadores pre e post para
cada vrtice do grafo.
u ancestral de v se e somente se
pre[u] <pre[v]< post[v]<post[u]

Dasgupta-Cap 3
Exerccio 22
Execute uma DFS em G e armazene os
contadores pre e post para cada vrtice do
grafo. Seja v o vrtice com maior post. Sabemos
que ele pertence a um source node em G~ (aula
de componentes fortemente conexos).
Execute uma DFS comeando em v. Se apenas
uma rvore for gerada ento existe o n
desejado. Caso contrrio, no.

Dasgupta-Cap 3
Exerccio 24
Execute o algoritmo linear para ordenao
topolgica.
Se em algum ponto o conjunto S dos
vrtices com grau de entrada igual a 0 tiver
mais de um elemento, ento G no possui
o caminho desejado. Caso contrrio,
ordem topolgica o caminho desejado.

Exercicio Resolvido
Problema
Seja um grafo G=(V,E) representando a planta de um edifcio.
Inicialmente temos dois robos localizados em dois vrtices de V, a e b,
que devem alcanar os vrtices c e d de V.
A cada passo um dos robos deve caminhar para um vrtice adjacente ao
vrtice que ele se encontra no momento.
Exiba um algoritmo polinomial que decida se possvel, ou no, os robos
partirem de a e b e chegarem em c e d, respectivamente, sem que em
nenhum momento eles estejam a distncia menor do que r, onde r um
inteiro dado.

23

Exercicio Resolvido
Soluo
Seja H um grafo representando as configuraes possveis (posies
dos robos) do problema. Cada n de H corresponde a um par ordenado
de vrtices de V cuja distncia menor ou igual a r.
Um par de ns u e v de H tem uma aresta se e somente em um passo
possvel alcanar a configurao v a partir da configurao u em um
nico passo, ou seja, se u=(u1,u2) e v=(v1,v2) ento uma das alternativas
vlida
(i) u1=v1 e (u2,v2) pertence a E
(i) u2=v2 e (u1,v1) pertence a E
O problema portanto consiste em decidir se existe um camnho entre o
n (a,b) e o n (c,d) em H. Isso requer tempo linear no tamanho de H.
Como H tem O(n2) vrtices e O(n3) arestas, o algoritmo executa em
O(n3) .

24

Dasgupta, Cap 4 -Exerccio 11


Execute Dijkstra a partir de cada vrtice v. O(|
V|3)
Guarde em uma tabela Dist a menor distncia
Dist(u,v) entre u e v para cada para u,v
Procure na tabela Dist o par de vrtices u,v
que minimiza Dist(u,v)+Dist(v,u). Se o mnimo
infinito ento o grafo acclico
O(|V|3), j que temos que considerar todos os
pares

Dasgupta, Cap 4 -Exerccio 12


Seja e=(u,v)
Remova a aresta e de G
O(|V|)

Execute Dijkstra para encontrar o caminho


P de custo mnimo entre v e u em G-e.
O(|V|2), utilizando vetor como fila de
prioridades

O ciclo dado pela unio de P com e.

Dasgupta, Cap 4 -Exerccio 14


1. Execute Dijkstra para encontrar o caminho
de custo mnimo entre v0 e os demais
vertices em G
2. Execute Dijkstra para encontrar o caminho
de custo mnimo entre v0 e os demais
vertices em GR (grafo reverso)
3. O caminho mnimo entre u e w passando
por vo o caminho mnimo entre u e v0 e
vo e w

Dasgupta, Cap 4 -Exerccio 17.a


Utilize um vetor de nW posies como fila
de prioridade.
A posio i do vetor deve guardar os ns v
tal que o custo (v) do menor caminho da
origem s at v i.

Dasgupta, Cap 4 -Exerccio 17.a


Portanto, encontrar o custo total de
encontrar o vrtice com menor valor ()
requer O(nW) operaes
Se o ultimo vrtice colocado em S foi u ento
a busca pelo menor valor de () deve ser
feita a partir de (u).

As atualizaes podem ser feitas em O(E)

ESTUDEM

Você também pode gostar