¿Qué es un grafo?
A grandes rasgos, un grafo es una estructura de datos utilizada para representar relaciones entre objetos. Consiste en un conjunto de nodos (también llamados vértices) y un conjunto de aristas (también llamadas conexiones o bordes) que conectan estos nodos. Dependiendo del tipo de grafo, las aristas pueden tener diferentes propiedades, como direccionalidad (en grafos dirigidos) o pesos (en grafos ponderados).
Programación del un grafo en Python
El código del grafo en Python es el siguiente:
class Graph:
def __init__(self): self.graph = {}
def add_vertex(self, vertex): if vertex not in self.graph: self.graph[vertex] = {}
def add_edge(self, vertex1, vertex2, weight=None, directed=False): self.add_vertex(vertex1) self.add_vertex(vertex2) self.graph[vertex1][vertex2] = weight if not directed: self.graph[vertex2][vertex1] = weight
def display(self): for vertex, edges in self.graph.items(): print(f"Vértice {vertex} tiene como conexiones a:") for neighbor, weight in edges.items(): if weight: print(f" - {neighbor} (peso: {weight})") else: print(f" - {neighbor}")
A continuación te explicamos cada segmento de línea:
Lo primero que tenemos que hacer es crear una clase grafo, donde se tienen 1 instancia y 3 métodos display , add_vertex y add_edge,
class Graph:
def __init__(self):
def add_vertex(self,vertex):
def add_edge(self, vertex1, vertex2, weight=None, directed=False)
def display(self)
Para la instancia _init_(self):
#Se crea un atributo "graph" que es un diccionario en el que las claves representan los
#vértices del grafo y los valores son también diccionarios que representan los vecinos
#de cada vértice y los pesos de las aristas.
def __init__(self): self.graph = {}
Para el método def add_vertex(self, vertex):
# Método para agregar un vértice al grafo. # Parámetros: #self: Acceder a los atributos y métodos de la instancia dentro de la clase #vertex: El vértice que se desea agregar al grafo if vertex not in self.graph: # Verifica si el vértice ya existe en el grafo. # Si no existe, crea una nueva entrada en el diccionario con el vértice como clave y un diccionario vacío como valor. self.graph[vertex] = {}
Para el método add_edge(self, vertex1, vertex2, weight=None, directed=False):
def add_edge(self, vertex1, vertex2, weight=None, directed=False):
# Método para agregar una arista al grafo.
# Parámetros:
# - vertex1: El primer vértice de la arista.
# - vertex2: El segundo vértice de la arista.
# - weight: El peso de la arista (opcional, por defecto es None).
# - directed: Un indicador booleano que indica si la arista es dirigida o no (opcional, por defecto es False).
self.add_vertex(vertex1) # Agrega el vértice 1 al grafo si aún no está presente.
self.add_vertex(vertex2) # Agrega el vértice 2 al grafo si aún no está presente.
# Agrega la arista desde el vértice 1 al vértice 2 en el diccionario del grafo.
self.graph[vertex1][vertex2] = weight
if not directed:
# Si la arista no es dirigida, también se agrega la arista desde el vértice 2 al vértice 1.
self.graph[vertex2][vertex1] = weight
Para el método display(self):
def display(self):
# Método para mostrar el grafo.
for vertex, edges in self.graph.items():
# Itera sobre cada vértice en el grafo.
# vertex es el vértice actual y edges es un diccionario de sus vecinos (vértices adyacentes).
print(f"Vértice {vertex} tiene como conexiones a:")
for neighbor, weight in edges.items():
# Itera sobre cada vecino del vértice actual.
# neighbor es el vértice vecino y weight es el peso de la arista entre el vértice actual y su vecino.
if weight:
# Si hay un peso definido para la arista, se muestra.
print(f" - {neighbor} (peso: {weight})")
else:
# Si no hay peso definido, se muestra el vecino sin peso.
print(f" - {neighbor}")
Ejemplo de Implementación del Grafo.
Ahora intentaremos implementar el siguiente gafo haciendo uso de la clase, mencionada anteriormente:

El código seria el siguiente:
# Crear una instancia de la clase GraphResultado:
g = Graph()
# Agregar vértices
vertices = ['A', 'B', 'C', 'D', 'E', 'F']
for vertex in vertices:
g.add_vertex(vertex)
# Agregar aristas ponderadas
g.add_edge('A', 'B', weight=5)
g.add_edge('A', 'C', weight=2)
g.add_edge('B', 'C', weight=1)
g.add_edge('B', 'D', weight=4)
g.add_edge('C', 'D', weight=3)
g.add_edge('C', 'E', weight=6)
g.add_edge('D', 'E', weight=7)
g.add_edge('E', 'F', weight=8)
# Mostrar el grafo
g.display()

Programar un grafo en Python