Pós-graduação em Ciência da Computação – UFU
Disciplina – Análise de Algoritmos
Profa. Sandra de Amo
Exercícios– AULA 14
Exercicio 1.
a) Construa a lista de adjacências para cada vértice do grafo.
b) Aplique o algoritmo de busca em profundidade no seguinte grafo G, mostrando
a cada passo o estado do array Visitados e as listas de adjacências dos vértices.
A cada vez que uma aresta (v,u) é escolhida na lista L_v de adjacências do
vértice v, esta aresta é retirada da lista ! (a melhor estrutura para se utilizar
aqui é uma pilha. A operação pop é utilizada para retirar o primeiro elemento
da pilha).
c) Retorne, para cada vértice v os números Pre[v] e Pos[v]. Os números Prev[v] em
ordem crescente correspondem à ordem em que os vértices do grafo são visitados.
d) Construa um array de m posições, m = |E| (número de arestas), contendo 0s ou 1s,
dependendo se a aresta correspondente à posição é percorrida em sentido positivo
(aresta de árvore) ou não (aresta de backtracking). A ordem das arestas corresponde à
ordem em que aparecem nas listas de adjacências. Por exemplo, suponha que
tenhamos 4 vértices A, B, C,D (nesta ordem) e 4 arestas e que as respectivas listas de
adjacência são:
L_A = [B, C]
L_B = [A, D]
L_C = [A, D]
L_D = [B,C]
Então a ordem das arestas é a seguinte: <(A,B), (A,C), (B,D), (C,D)>
Exercício 2. Mostre por indução em k: “Para todo k ≥ 0, se um vértice w dista k passos do
vértice v então no final da execução de Explore(G,v) a variável visited(w) = true.” (Utilizamos
este resultado na prova de que o algoritmo Explore é correto, isto é, produz EXATAMENTE
todos os vértices alcançáveis a partir de v no grafo G).
Exercício 3. Em um grafo não dirigido, define-se o grau de um vértice v (denotado por d (v))
como sendo o número de vizinhos de v. Exemplo, no grafo do exercicio 1, d (A) = 2.
a) Mostre que :
b) Use a parte (a) para mostrar que o número de vértices com grau impar é par.
c) Quais os vértices do grafo do Exercicio 1 que têm grau impar ?
Exercício 4. Utilizando a rotina Explore(G,v), dê o pseudo-código dos algoritmos para
resolver os seguintes problemas de grafos:
a) Dados dois vértices em um grafo (dirigido ou não), determinar se existe um caminho
ligando estes vértices.
Input: G, u,v
Output: “Yes” se existe caminho ligando u a v, “Não” em caso contrário
b) Determinar o número de componentes conexas de um grafo G (dirigido ou não)
(vimos em sala de aula !)
Input: G
Output: N = número de componentes conexas de G
c) Determinar se G é conexo (G dirigido ou não).
Input: G
Output: “Yes” se G é conexo, “Não” em caso contrário
Exercicio 5. Adapte o exercicio 4(a) para que um caminho entre u e v seja retornado pelo
algoritmo, caso existir. Mostre que:
a) o caminho retornado depende da ordem considerada nos vértices. Caso a ordem
seja alterada, um caminho diferente poderá ser retornado.
b) Mostre que o caminho retornado (fixada uma ordem nos vértices), nem sempre é o
mais curto.
c) Proponha um algoritmo que retorne o caminho mais curto entre dois vértices,
utilizando a rotina proposta no exercicio 4(a). Veja que (pela discussão em 5(a))
para cada ordem considerada nos vértices, a rotina pode ser aplicada em tempo
linear, produzindo um caminho entre u e v.
d) Calcule a complexidade do algoritmo proposto em (c).
Exercicio 6: Um grafo não-dirigido é bipartite se o conjunto de vértices pode ser particionado em
dois subconjuntos disjuntos V1, V2 tais que vértices de um mesmo subconjunto não são ligados por
arestas.
a) Dê um algoritmo linear (em |V| e em |E|) para determinar se um grafo nãodirigido é bipartite.
b) Mostre que um grafo não-dirigido é bipartite se e somente se pode ser colorido
com 2 cores.
Exercicio 7: Tem-se 3 reservatórios com tamanhos de 10 litros, 7 litros e 4 litros respectivamente.
Os reservatórios de 7 e 4 litros estão inicialmente cheios e o de 10 litros está inicialmente vazio.
Somente 1 tipo de operação é permitido: despejar o conteúdo de um reservatório A em outro B até
que o reservatório A fique vazio ou que B fique cheio. Queremos saber se existe uma sequência de
operações que no final deixam 2 litros no reservatório de 7 litros e 2 litros no reservatório de 4
litros.
a) Modele este problema como um problema de grafos, especificando quais são os vértices e
as arestas, e enunciando a questão que se quer responder.
b) Que algoritmo deve ser aplicado para resolver o problema de grafos do item (a) ?
c) Encontre a resposta, aplicando o algoritmo.
Download

Exercicios- Aula 14