Fracasar en Blogger intentando ganar dinero: lo que aprendí después de años escribiendo

Bienvenid@ a Programación para Todos, un espacio para aprender a programar desde cero con ejemplos sencillos en PHP, HTML, JavaScript, Python, C++, SQL, y más. Aquí encontrarás historia, conceptos clave y aplicaciones reales. Porque la programación no es solo para expertos: en todo proyecto de software se necesita un equipo que entienda, colabore y construya en conjunto
Los grafos son una estructura de programación que nos permite, de manera más ágil, encontrar la ruta más rápida para llegar de un origen a un destino. En la programación, recuerden que siempre tratamos de representar algo del mundo real en un concepto que pueda ser programado (paradigmas de la programación). Imaginemos que estamos pensando en hacer un viaje en metro donde nuestro origen es Polanco y queremos llegar a Terminal Aérea. Para ello, existen algunas posibles rutas para llegar al destino. Esto lo podemos visualizar en la siguiente imagen.
Ahora este grafo lo podemos llevar a un programa por medio de la librería networkx la cual nos permite poder trabajar con grafos y Python. Documentación de la libreria https://networkx.org/documentation/stable/install.html
Recuerden siempre que vamos a utilizar una nueva librería en Python debemos instalarla en este caso utilizaremos el comando PIP pip install networkx[default]
Una vez instalado vamos armar un programa que represente el grafo
Luego la lógica para que encuentre el camino más rápido
import networkx as nx
import matplotlib.pyplot as plt
# Crear un grafo vacío
G = nx.Graph()
# Agregar nodos (estaciones) y aristas (conexiones)
# Aquí estamos agregando algunas estaciones y conexiones de ejemplo.
estaciones = ["Pantitlán", "Zaragoza", "Gómez Farías", "Boulevard Puerto Aéreo", "Balbuena", "Moctezuma", "San Lázaro", "Candelaria", "Merced", "Pino Suárez"]
conexiones = [("Pantitlán", "Zaragoza"), ("Zaragoza", "Gómez Farías"), ("Gómez Farías", "Boulevard Puerto Aéreo"),
("Boulevard Puerto Aéreo", "Balbuena"), ("Balbuena", "Moctezuma"), ("Moctezuma", "San Lázaro"),
("San Lázaro", "Candelaria"), ("Candelaria", "Merced"), ("Merced", "Pino Suárez")]
# Agregar nodos al grafo
G.add_nodes_from(estaciones)
# Agregar aristas al grafo
G.add_edges_from(conexiones)
# Dibujar el grafo
pos = nx.spring_layout(G) # Disposición de los nodos
nx.draw(G, pos, with_labels=True, node_size=500, node_color="skyblue", font_size=10, font_color="black", font_weight="bold")
# Mostrar el grafo
plt.show()
import networkx as nx
import matplotlib.pyplot as plt
# Crear un grafo vacío
G = nx.Graph()
# Listas de estaciones por línea (esto es un ejemplo simplificado)
linea_1 = ["Observatorio", "Tacubaya", "Juanacatlán", "Chapultepec", "Sevilla", "Insurgentes", "Cuauhtémoc", "Balderas", "Salto del Agua", "Isabel la Católica", "Pino Suárez", "Merced", "Candelaria", "San Lázaro", "Moctezuma", "Balbuena", "Boulevard Puerto Aéreo", "Gómez Farías", "Zaragoza", "Pantitlán"]
linea_2 = ["Cuatro Caminos", "Panteones", "Tacuba", "Cuitláhuac", "Popotla", "Colegio Militar", "Normal", "San Cosme", "Revolución", "Hidalgo", "Bellas Artes", "Allende", "Zócalo", "Pino Suárez", "San Antonio Abad", "Chabacano", "Viaducto", "Xola", "Villa de Cortés", "Nativitas", "Portero", "Ermita", "General Anaya", "Tasqueña"]
#estos dataset se tienen que hacer uno por cada línea del metro
# Agregar conexiones (aristas) a cada línea
conexiones_1 = [(linea_1[i], linea_1[i + 1]) for i in range(len(linea_1) - 1)]
conexiones_2 = [(linea_2[i], linea_2[i + 1]) for i in range(len(linea_2) - 1)]
# Agregar nodos y aristas al grafo
G.add_nodes_from(linea_1)
G.add_nodes_from(linea_2)
G.add_edges_from(conexiones_1)
G.add_edges_from(conexiones_2)
# Definir posiciones de los nodos para una visualización mejorada
pos = nx.spring_layout(G, seed=42)
# Dibujar la línea 1 en rojo
nx.draw_networkx_nodes(G, pos, nodelist=linea_1, node_color='red', label='Línea 1')
nx.draw_networkx_edges(G, pos, edgelist=conexiones_1, edge_color='red')
# Dibujar la línea 2 en azul
nx.draw_networkx_nodes(G, pos, nodelist=linea_2, node_color='blue', label='Línea 2')
nx.draw_networkx_edges(G, pos, edgelist=conexiones_2, edge_color='blue')
# Dibujar etiquetas de los nodos
nx.draw_networkx_labels(G, pos, font_size=8)
# Mostrar leyenda
plt.legend(scatterpoints=1)
# Mostrar el grafo
plt.title("Red de Metro de la Ciudad de México")
plt.show()
Les comparto la liga del vídeo explicando la ejecución del programa.
Espero que esté ejemplo les haya servido para comprender mejor el concepto de grafos y como pueden desarrollarlo en Python.
Comentarios
Publicar un comentario
Dejanos tus dudas y comentarios