5. Grafos simples y multigrafos

Un grafo simple admite como máximo una conexión entre cada par de vértices. Un multigrafo permite representar varias relaciones entre los mismos elementos y, según la definición utilizada, también bucles.

5.1 Introducción

No todos los sistemas conectados necesitan las mismas reglas. En una red de amistad suele bastar una única arista entre dos personas. En una red de transporte, en cambio, dos ciudades pueden estar unidas por varias rutas, compañías o medios diferentes.

Los grafos simples restringen las conexiones para facilitar su análisis. Los multigrafos permiten conservar varias aristas entre el mismo par de vértices y representar más detalles del sistema.

5.2 ¿Qué es un grafo simple?

Un grafo simple no contiene aristas paralelas ni bucles. Entre dos vértices diferentes puede existir como máximo una arista.

Permitido: {A, B}
No permitido: repetir {A, B}
No permitido: {A, A}

Esta estructura es suficiente cuando solo interesa saber si una relación existe, sin distinguir cuántas veces aparece o qué variante representa.

5.3 ¿Qué es un multigrafo?

Un multigrafo puede contener varias aristas que conectan el mismo par de vértices. Estas conexiones reciben el nombre de aristas paralelas o múltiples.

e₁ = {A, B}
e₂ = {A, B}
e₁ y e₂ son aristas diferentes

En algunos textos, los multigrafos también admiten bucles; en otros, los grafos con aristas múltiples y bucles se denominan pseudografos. En programación conviene especificar explícitamente qué reglas permite la estructura.

5.4 Aristas paralelas y bucles

ElementoDescripciónEjemplo
Arista comúnUne dos vértices diferentesRuta entre A y B
Aristas paralelasVarias aristas unen el mismo parAutobús y tren entre A y B
BucleUna arista conecta un vértice consigo mismoProceso que vuelve a su estado actual

Un bucle tiene el mismo vértice como origen y destino. En un grafo no dirigido aporta dos incidencias al grado del vértice.

5.5 Simulación interactiva: simple o multigrafo

Selecciona dos vértices para agregar una conexión. En modo simple no podrás repetir una arista ni conectar un nodo consigo mismo. En modo multigrafo ambas operaciones están permitidas.

Grafo simple: selecciona dos vértices diferentes.
TipoSimple
Aristas3
Paralelas adicionales0
Bucles0

Repite varias veces la conexión A—B en modo multigrafo. Cada curva representa una arista distinta aunque sus extremos sean los mismos.

5.6 ¿Cuándo usar un grafo simple?

Un grafo simple es apropiado cuando la existencia de la relación es suficiente y las conexiones repetidas no agregan información útil.

  • Personas que son amigas dentro de una red recíproca.
  • Casillas contiguas en un tablero.
  • Equipos que están conectados físicamente.
  • Conflictos entre materias que no pueden compartir horario.

5.7 ¿Cuándo usar un multigrafo?

Un multigrafo resulta útil cuando dos objetos pueden estar relacionados de varias maneras independientes.

  • Varias líneas de transporte entre las mismas estaciones.
  • Múltiples vuelos diarios entre dos aeropuertos.
  • Distintas conexiones de red entre dos centros de datos.
  • Varias transacciones entre las mismas cuentas.
  • Diferentes papeles que relacionan a dos personas dentro de una organización.

5.8 Grado y multiplicidad

La multiplicidad de un par de vértices indica cuántas aristas los conectan. En un grafo simple solo puede ser cero o uno; en un multigrafo puede ser mayor.

multiplicidad(A, B) = cantidad de aristas entre A y B

Cada arista paralela cuenta por separado al calcular el grado. En un grafo no dirigido, un bucle contribuye con dos al grado porque sus dos extremos inciden en el mismo vértice.

5.9 Representar aristas múltiples en JavaScript

Un arreglo de aristas conserva naturalmente las repeticiones. Podemos asignar un identificador y datos propios a cada conexión.

const rutas = [
  { id: 1, origen: "A", destino: "B", medio: "tren" },
  { id: 2, origen: "A", destino: "B", medio: "autobús" },
  { id: 3, origen: "B", destino: "C", medio: "tren" }
];

const entreAyB = rutas.filter(ruta =>
  (ruta.origen === "A" && ruta.destino === "B") ||
  (ruta.origen === "B" && ruta.destino === "A")
);

console.log("Rutas entre A y B:", entreAyB.length);

5.10 Validar un grafo simple

Antes de agregar una arista a un grafo simple debemos comprobar que no sea un bucle y que la conexión no exista.

const aristas = [["A", "B"], ["B", "C"]];

function puedeAgregar(a, b) {
  if (a === b) return false;

  return !aristas.some(([x, y]) =>
    (x === a && y === b) || (x === b && y === a)
  );
}

console.log(puedeAgregar("A", "C"));
console.log(puedeAgregar("B", "A"));
console.log(puedeAgregar("C", "C"));

5.11 Elegir el modelo adecuado

PreguntaModelo recomendadoMotivo
¿Solo importa si existe conexión?Grafo simpleEvita información duplicada
¿Cada conexión posee identidad propia?MultigrafoConserva cada relación
¿Puede un elemento relacionarse consigo mismo?Modelo que admita buclesRepresenta autorrelaciones
¿Las relaciones repetidas pueden resumirse?Grafo simple ponderadoUn peso puede guardar la cantidad

A veces un multigrafo puede simplificarse reemplazando varias aristas por una sola con un peso. La decisión depende de si necesitamos conservar la identidad y los datos de cada conexión.

5.12 Errores comunes

  • Agregar la misma arista varias veces a una estructura que pretende ser simple.
  • Eliminar aristas repetidas cuando cada una representa una relación diferente.
  • Confundir un bucle con un vértice aislado.
  • Contar un bucle como una sola incidencia al calcular el grado no dirigido.
  • Usar el término multigrafo sin aclarar si se permiten bucles.
  • Guardar solo los extremos y perder los datos particulares de cada arista.

5.13 Qué debes recordar de este tema

  • Un grafo simple no contiene aristas paralelas ni bucles.
  • Un multigrafo admite varias aristas entre el mismo par de vértices.
  • Una arista que conecta un vértice consigo mismo se denomina bucle.
  • La multiplicidad indica cuántas aristas unen un par de vértices.
  • Cada arista paralela cuenta por separado al calcular el grado.
  • Las reglas admitidas deben quedar claras al diseñar la estructura.

5.14 Conclusión

Los grafos simples ofrecen una representación compacta cuando solo importa la existencia de una relación. Los multigrafos conservan conexiones repetidas y permiten modelar sistemas donde cada vínculo tiene identidad propia.

En el próximo tema incorporaremos valores numéricos a las aristas mediante grafos ponderados.