¿Te resulta más fácil leer con fondo crema, un tono de color, más contraste o un texto más grande? Elige tus colores y tu texto una sola vez, para todas las páginas.

Lección gratuita

Grafos y árboles: caminos y conexión

Después de esta lección: Puedo describir una red como un grafo y decidir si hay un camino entre dos vértices.

Lección de 55 min2 comandosLaboratorio de compiladores y arquitectura: gcc, flex, bison y RISC-V en una VM

Un plano de metro es un grafo

Un grafo es un conjunto de puntos, llamados vértices, unidos por líneas, llamadas aristas. Sirve para describir una red de metro, de amistades o de ordenadores y para preguntar si puedes llegar de un punto a otro.

Una ciudad cierra una estación y la gente se pregunta si todavía se puede ir del hospital a la universidad. Un grafo responde con precisión.

Al final de esta lección

Nota

Puedo describir una red como un grafo y decidir si hay un camino entre dos vértices.

Palabras clave

PalabraQué significa
Vérticeun punto del grafo, como una estación
Aristauna línea que une dos vértices
Gradoel número de aristas de un vértice
Caminouna sucesión de vértices unidos por aristas
Conexoun grafo donde hay camino entre cualquier pareja de vértices
Árbolun grafo conexo y sin ciclos

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Un grafo son vértices y aristas

En el plano de una red hay cuatro estaciones, los vértices: Plaza, Norte, Campus y Hospital. Cada tramo de línea entre dos estaciones es una arista.

El grado de un vértice cuenta sus aristas. Plaza tiene dos tramos, a Norte y a Campus, así que su grado es 2.

Ejemplo resuelto: el grado de cada estación

VérticeVecinosGrado
PlazaNorte, Campus2
NortePlaza, Campus2
CampusPlaza, Norte, Hospital3
HospitalCampus1

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Python calcula los grados

Comando
python3 -c "red = {'A': ['B', 'C'], 'B': ['A', 'C'], 'C': ['A', 'B', 'D'], 'D': ['C']}; print([len(red[n]) for n in red], sum([len(red[n]) for n in red]) // 2)"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Un camino va de arista en arista

Un camino es una sucesión de vértices en la que cada pareja seguida está unida por una arista. De Norte a Hospital hay uno: Norte, Campus, Hospital.

Un grafo es conexo si hay camino entre cualquier pareja de vértices. Si una estación queda aislada, la red no es conexa.

Qué estaciones alcanzas desde Plaza

Código: python
red = {"Plaza": ["Norte", "Campus"], "Norte": ["Plaza"], "Campus": ["Plaza", "Hospital"],
       "Hospital": ["Campus"], "Puerto": []}
por_visitar = ["Plaza"]
visitadas = []
while len(por_visitar) > 0:
    estacion = por_visitar.pop()
    if estacion not in visitadas:
        visitadas.append(estacion)
        for vecina in red[estacion]:
            por_visitar.append(vecina)
# Puerto no aparece: nadie lo une con el resto.
print("Se llega a:", visitadas)
print("Hay camino a Puerto:", "Puerto" in visitadas)

Un error frecuente

Advertencia

Mucha gente cree que un grafo conexo es uno donde cada vértice se une con todos los demás. No es así. Conexo solo pide que exista algún camino entre cada pareja, aunque pase por varias aristas.

Un árbol es un grafo conexo sin ciclos

Un ciclo es un camino que vuelve al vértice de salida sin repetir aristas. Un árbol es un grafo conexo que no tiene ciclos.

Un árbol con n vértices tiene siempre n − 1 aristas. Con 5 vértices, 4 aristas. Una arista más crea un ciclo, y una menos deja un vértice aislado.

Ejemplo resuelto: ¿es un árbol?

GrafoVérticesAristasConexoÁrbol
Cadena de 4 estaciones43SíSí
Triángulo de 3 estaciones33SíNo, tiene un ciclo
Dos parejas separadas42NoNo
Una estación y tres ramales43SíSí

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Un árbol de 5 vértices

Comando
python3 -c "arbol = {'A': ['B', 'C'], 'B': ['A', 'D', 'E'], 'C': ['A'], 'D': ['B'], 'E': ['B']}; print(len(arbol), sum([len(v) for v in arbol.values()]) // 2)"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Sobre este laboratorio y su código: Laboratorio de compiladores y arquitectura: gcc, flex, bison y RISC-V en una VM

¿Enseñas a una clase? Asigna este módulo a tus alumnos con guía del profesor, tareas con corrección automática y un laboratorio para cada alumno.