Escolar Documentos
Profissional Documentos
Cultura Documentos
Eduardo Laber
Exerccio de Implementao
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
Cap 3-Tardos
Exerccio 3
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
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
ESTUDEM