---
title: "Prévia do TP4"
tags: [grafos, prova, bfs, dfs, dijkstra, mst, bipartido]
author: "Leonardo Gloria"
layout: default
---
# 🧮 Prévia do TP4
**Tópicos:** BFS, DFS, Grafos Bipartidos, Dijkstra, Árvores Geradoras Mínimas (MST)
**Quantidade de questões:** 16
**Instruções:** Responda todas as questões. Mostre os passos, algoritmos e estruturas utilizadas (lista de adjacência, matrizes de adjacência, tabelas de distâncias, etc.). Para questões de implementação, entregue o código comentado.
---
### 1.
Dado um grafo não direcionado representando amigos em uma rede social, use **BFS** para descobrir o número mínimo de conexões necessárias para que uma pessoa alcance outra (grau de separação).
---
### 2.
Usando **DFS**, determine se o grafo abaixo é **conexo**.
Mostre a ordem de visita dos vértices.
---
### 3.
Dado um grafo direcionado representando dependências entre tarefas, use **DFS** para determinar se há um **ciclo**.
Se houver, exiba um exemplo de ciclo encontrado.
---
### 4.
Construa o grafo de rotas entre cidades e, usando **BFS**, descubra **quantas cidades estão a uma distância de até 2 estradas** da capital.
---
### 5.
Um grupo de estudantes formou pares de “inimizades”. Modele a relação como um grafo e use **bicoloração (2-coloring)** para verificar se é possível dividir os alunos em **dois grupos que não se odeiam**.
Se não for possível, mostre um **exemplo de conflito**.
---
### 6.
Dado um grafo representando funcionários e projetos (onde uma aresta indica que o funcionário trabalha em determinado projeto), determine se o grafo é **bipartido** e mostre os **conjuntos U e V**.
---
### 7.
Em um mapa de cidades conectadas por rodovias com pesos representando distâncias, aplique o **Algoritmo de Dijkstra** para encontrar o **menor caminho de uma cidade origem até todas as outras**.
Mostre a tabela de distâncias e o grafo resultante com o caminho mínimo.
---
### 8.
Mostre por que o **Algoritmo de Dijkstra** falha em um grafo que possui **arestas com peso negativo**.
Forneça um exemplo numérico simples e demonstre o erro passo a passo.
---
### 9.
Um aplicativo de entregas precisa calcular o **menor tempo de entrega** entre armazéns e clientes, considerando o **tempo de tráfego como peso das arestas**.
Implemente Dijkstra e exiba o tempo mínimo entre o armazém principal e cada cliente.
---
### 10.
Dado o grafo de cidades e custos de ligação, aplique o **Algoritmo de Kruskal** para encontrar a **árvore geradora mínima (MST)**.
Mostre as arestas escolhidas e o custo total.
---
### 11.
Resolva o mesmo problema do exercício anterior usando o **Algoritmo de Prim**, iniciando de um nó diferente.
Compare as árvores obtidas e diga se são **únicas** ou **diferentes**.
---
### 12.
Explique como o uso de **disjoint set (Union-Find)** ajuda a detectar **ciclos** durante a construção de uma árvore geradora mínima.
---
### 13.
Um engenheiro deseja conectar computadores com cabos de menor custo possível.
Monte a árvore geradora mínima e indique qual seria o **ganho percentual** em relação à soma de todos os cabos possíveis.
---
### 14. <!-- Maratona -->
Você recebeu um mapa com **N ilhas e M pontes**. Cada ponte tem um **custo de construção**.
O governo quer ligar todas as ilhas gastando o mínimo possível.
Se não for possível conectar todas, imprima **“Impossível”**.
*(Dica: use Kruskal.)*
---
### 15. <!-- Maratona -->
Dada uma matriz **N×N** representando um mapa onde cada célula tem um custo de travessia, calcule o **custo mínimo** para ir do canto superior esquerdo ao inferior direito, movendo-se apenas nas quatro direções (cima, baixo, esquerda, direita).
*(Desafio: resolver usando Dijkstra em matriz – grafo implícito.)*
### 16.
MESA - Mesa da Sra Montagny!
Já comentamos as festas da Sra. Montagny à beira do Lake Louise em Banff. Nas suas festas ela se compromete a resolver um outro problema que faz tremer organizadores de jantares em todo o mundo: onde sentar os convidados. A magnata simplifica bastante o problema pedindo aos convidados, no mesmo questionário já comentado, que anote na lista dos convidados aqueles que desejariam ter à sua frente na mesa do jantar. A idéia é ter seus amigos sempre à sua frente, para que a conversa possa fluir melhor. A habilidade da socialite é tamanha que ela foi contratada pelo Fairmont Banff Springs hotel (hotel em que vão ocorrer as finais mundiais do ICPC em 2008: Hotel) para trabalhar no arranjo de mesas de banquete.
Sua tarefa neste problema é auxiliar novamente a magnata. Dados os desejos dos convidados, seu programa deve decidir se é possível dispô-los numa mesa de forma que cada convidado tenha todos os seus amigos no lado oposto da mesa.
## Entrada
A entrada é composta de diversas instâncias. A primeira linha de cada instância contém dois inteiros n (1 <= n <= 100) e m (0 <= m <= n(n-1)/2), onde n é o número de convidados e m é o número de relações de amizade. Cada uma das m linhas seguintes contém dois inteiros u e v indicando que u é amigo de v e v é amigo de u, onde 1 <= u,v <= n.
A entrada termina com final de arquivo.
## Saída
Para cada instância, você deverá imprimir um identificador Instancia k, onde k é o número da instância atual. Na linha seguinte imprima sim se é possível e nao caso contrário.
Após cada instância imprima uma linha em branco.
### Exemplo:
```
Entrada:
3 3
1 2
2 3
1 3
4 3
1 2
1 3
1 4
Saída:
Instancia 1
nao
Instancia 2
sim
```
---
**Observações do professor:**
- Use notação clara (V, E) e indique a representação escolhida (lista de adjacência, matriz de adjacência, etc.).
- Para a correção, considerar passos intermediários e justificativa além da resposta final.