Você está na página 1de 3

Exercício avaliativo 4 (versão: 9/11/23)

Disciplina: Complexidade e Projeto de Algoritmos


Professor: Vinícius Dias (viniciusdias@ufla.br)

Grafos eulerianos e hamiltonianos


1 Um grafo grade Gm,n é um grafo que imita um quadriculado, com m linhas orizontais paralelas
e n linhas verticais paralelas. No encontro de cada segmento de reta (interseções) temos vértices. Em
que condições um grafo grade é euleriano? Em que condições ele é hamiltoniano?

2 Em que condições um grafo bipartido completo Km,n é hamiltoniano?

3 Considere a planta baixa de uma casa abaixo. Como determinar se é possível partir de algum
cômodo da casa, visitar todos os cômodos mas passando uma única vez em cada porta, e sempre vol-
tando ao cômodo do início? Modele o problema usando grafos, identificando vértices e arestas, além
de fornecer um algoritmo que resolve o problema.

4 Considere o grafo a seguir e o problema do caixeiro viajante (PCV).

1
Fonte: Levitin 3ed.

a. Execute o algoritmo de backtracking apresentado para o problema (isto é, aquele que vai cons-
truindo passo-a-passo todos os circuitos).

b. Execute as três heurísticas construtivas para o problema: “vizinho mais próximo”, “inserção mais
próxima” e “inserção gulosa de arestas”. Deixe indicado os caminhos intermediários sendo cons-
truídos em cada caso.

5 Realize a leitura da seguinte nota de aula do prof. Mayron: <https://colab.research.google.


com/drive/1PvW1ud3BIollIU0If9SDCYCsJ5o2j0o0?usp=sharing#scrollTo=52z1-GJBVbR1>. O algo-
ritmo de Hierholzer é discutido e, em especial, uma estrutura de dados que o permite ser implementado
com complexidade O(m). Observe como os ponteiros são ajustados na figura do exemplo, quando um
primeiro ciclo [1, 2, 3, 1] é encontrado e removido. Faça o mesmo para o grafo do exercício acima:
mostre a estrutura de dados inicial e depois do momento em que o ciclo [a, b, c, a] é removido.

Caminhos mais curtos em grafos


6 Reescreva o algoritmo de Floyd-Warshall para caminhos mínimos de múltiplas fontes de forma
que seja registrado também a matriz de predecessores (Π) dos vértices, o que nos permitiria reconstruir
os caminhos mínimos em si. A resposta deve ser um pseudocódigo.

7 Apresente o pseudocódigo para:

a. Supondo que o predecessor de um vértice u.π esteja corretamente determinado após a execução
de algum algoritmo de caminhos mínimos a partir de uma única fonte (Bellman-Ford ou Dijkstra),
crie um algoritmo que imprima a sequência de vértices em um caminho mínimo entre u, v ∈ V .
Assinatura: PRINT-SHORTEST-PATH(u).

b. Novamente, supondo que os predecessores estejam corretamente determinados em uma matriz


(ver questão anterior, Floyd-Warshall), crie um algoritmo que imprima a sequência de vértices em
um caminho mínimo entre u e v. Assinatura: PRINT-SHORTEST-PATH(u, v).

2
8 Considere o problema de encontrar os caminhos de custo mínimo a partir de uma única fonte s em
um grafo acíclico direcionado (DAG) e ponderado. Forneça um algoritmo de complexidade O(m + n)
que resolva o problema. Dica: ordenação topológica.

9 Seja um grafo G = (V, E) direcionado e com pesos nas arestas. Os vértices desse grafo represen-
tam nós em uma rede de computadores e os arcos representa canais de comunicação entre um par de
computadores. O peso de um arco (u, v), denotado como w(u, v), indica a confiabilidade do respec-
tivo canal e representa probabilidade de que o canal u para v não falhe (um número entre 0 e 1:
0 ≤ w(u, v) ≤ 1). Assumindo que as probabilidades sejam independentes, forneça um algoritmo que
dados dois vértices fonte s e destino t e o grafo em questão, calcule o caminho mais confiável entre s e
t.

Fluxo máximo em grafos


mais exercícios serão incluídos aqui

Isomorfismo, planaridade, coloração e outros problemas


mais exercícios serão incluídos aqui

Você também pode gostar