Este projeto implementa o Algoritmo de Prim para encontrar a Árvore Geradora Mínima de um grafo não direcionado. O grafo é lido a partir de um arquivo texto, e a saída inclui o custo total e a árvore geradora mínima.
O Algoritmo de Prim é um método guloso utilizado para encontrar a árvore geradora mínima de um grafo. Ele funciona expandindo uma árvore a partir de um vértice inicial, conectando-a aos vértices ainda não incluídos, sempre escolhendo a aresta de menor peso.
- Entrada:
- Um arquivo texto contendo:
- O número de vértices
n
e o número de arestasm
. - Uma lista de arestas, cada uma no formato:
vértice1 vértice2 peso
.
- O número de vértices
- Um arquivo texto contendo:
- Saída:
- O custo total da árvore geradora mínima.
- A lista de arestas que compõem a árvore geradora mínima.
Arquivo grafo1.txt
:
5 7
0 1 2
0 3 6
1 2 3
1 3 8
1 4 5
2 4 7
3 4 9
shell Copiar código
Custo Total 16
Árvore Geradora Mínima [(0, 1), (1, 2), (1, 4), (0, 3)]
markdown Copiar código
- Python 3.x instalado.
- Clone o repositório ou faça o download do código.
- Crie um arquivo texto de entrada com o formato especificado.
- No terminal, execute o script da seguinte forma:
python prim.py
Quando solicitado, insira o nome do arquivo de entrada (ex: grafo1.txt). Estrutura de Arquivos bash Copiar código
├── prim.py # Script principal contendo o algoritmo de Prim ├── grafo1.txt # Exemplo de arquivo de entrada ├── LICENSE.md # Licensa do MIT └── README.md # Este arquivo
ler_arquivo(filename): Lê o arquivo de entrada e converte-o em uma lista de adjacência para ser usada no algoritmo. prim(n, n_out): Executa o algoritmo de Prim, utilizando uma fila de prioridade para selecionar as arestas de menor peso. heapq: Utilizado para gerenciar a fila de prioridade de maneira eficiente.
Considere o seguinte grafo com 5 vértices e 7 arestas. A partir dele, o algoritmo de Prim encontra a árvore geradora mínima com um custo total de 16.
2 3
0 ------ 1 ----- 2
| / |
6 8 5 7
| / |
3 -- 4 ---- 9
Grafo de Entrada (grafo1.txt)
Copiar código
5 7
0 1 2
0 3 6
1 2 3
1 3 8
1 4 5
2 4 7
3 4 9
Saída
saida
16
[(0, 1), (1, 2), (1, 4), (0, 3)]