Este arquivo README explica de forma clara, fácil de entender e organizada a implementação de uma classe Grafo em Python. O código apresentado abaixo é a implementação de um grafo não-direcionado ponderado.
class Grafo:
...
- 🏁 Inicializando a classe Grafo
- 🔗 Adicionando Arestas
- 📊 Matriz de Adjacência
- 📜 Lista de Adjacência
- 🔢 Matriz de Incidência
- 🎓 Grau do Vértice
- 📈 Grau Médio do Grafo
- 🔎 Busca em Profundidade
- 🔍 Busca em Largura
Para criar um objeto do tipo Grafo, é necessário informar o número de vértices. A classe irá inicializar as estruturas de dados internas, como a matriz de adjacências e a lista de adjacências.
grafo = Grafo(4)
Para adicionar uma aresta ao grafo, é necessário informar os vértices u
e v
, bem como o peso da aresta. A função adicionar_aresta(u, v, weight)
irá verificar se os vértices e o peso são válidos antes de adicionar a aresta.
grafo.adicionar_aresta(0, 1, 2)
A matriz de adjacência é uma representação do grafo em formato matricial. Para exibir a matriz de adjacência do grafo, basta chamar a função matriz_adjacencia()
.
print("Matriz de adjacência:")
for row in grafo.matriz_adjacencia():
print(row)
A lista de adjacência é outra representação do grafo. Para exibir a lista de adjacência do grafo, basta chamar a função lista_adjacencia()
.
print("\nLista de adjacência:")
for i, adj in enumerate(grafo.lista_adjacencia()):
print(f"{i}: {adj}")
A matriz de incidência é uma representação do grafo que relaciona vértices e arestas. Para exibir a matriz de incidência do grafo, basta chamar a função matriz_incidencia()
.
print("\nMatriz de incidência:")
for row in grafo.matriz_incidencia():
print(row)
Para obter o grau de um vértice específico, basta chamar a função grau_vertice(vertex)
, passando o vértice desejado como argumento.
print("\nGrau de vértices:")
for i in range(4):
print(f"Grau do vértice {i}: {grafo.grau_vertice(i)}")
Para obter o grau médio do grafo, basta chamar a função grau_medio()
.
print(f"\nGrau médio do grafo: {grafo.grau_medio()}")
A busca em profundidade é um algoritmo de travessia de grafos. Para executar a busca em profundidade a partir de um vértice inicial, basta chamar a função busca_profundidade(start_vertex)
.
print(f"\nBusca em profundidade a partir do vértice 0: {grafo.busca_profundidade(0)}")
A busca em largura é outro algoritmo de travessia de grafos. Para executar a busca em largura a partir de um vértice inicial, basta chamar a função busca_largura(start_vertex)
.
print(f"\nBusca em largura a partir do vértice 0: {grafo.busca_largura(0)}")
Aqui está um exemplo completo de como utilizar a classe Grafo:
qtd_arestas = 4
# Criando o grafo
grafo = Grafo(qtd_arestas)
# Adicionando arestas
grafo.adicionar_aresta(0, 1, 2)
grafo.adicionar_aresta(0, 3, 1)
grafo.adicionar_aresta(1, 2, 1)
grafo.adicionar_aresta(2, 3, 2)
# Exibindo a matriz de adjacência
print("Matriz de adjacência:")
for row in grafo.matriz_adjacencia():
print(row)
# Exibindo a matriz de incidência
print("\nMatriz de incidência:")
for row in grafo.matriz_incidencia():
print(row)
# Exibindo a lista de adjacência
print("\nLista de adjacência:")
for i, adj in enumerate(grafo.lista_adjacencia()):
print(f"{i}: {adj}")
# Exibindo o grau de cada vértice
print("\nGrau de vértices:")
for i in range(qtd_arestas):
print(f"Grau do vértice {i}: {grafo.grau_vertice(i)}")
# Exibindo o grau médio do grafo
print(f"\nGrau médio do grafo: {grafo.grau_medio()}")
# Busca em profundidade a partir do vértice 0
print(f"\nBusca em profundidade a partir do vértice 0: {grafo.busca_profundidade(0)}")
# Busca em largura a partir do vértice 0
print(f"\nBusca em largura a partir do vértice 0: {grafo.busca_largura(0)}")
Esperamos que este README tenha sido útil para entender melhor a classe Grafo e suas funcionalidades! 😃🌟