16. Conectividad en grafos

La conectividad estudia si los vértices pueden alcanzarse mediante caminos. Una sola arista puede unir regiones enteras o provocar que una red se divida al desaparecer.

16.1 Introducción

En una red no basta con conocer las conexiones directas. También interesa saber si podemos llegar de un vértice a otro utilizando una secuencia de aristas.

La conectividad describe esta posibilidad. Es fundamental para analizar redes de comunicación, rutas, dependencias y cualquier sistema que deba continuar funcionando aunque algunas conexiones fallen.

16.2 Vértices conectados

Dos vértices u y v están conectados si existe al menos un camino entre ellos.

u y v están conectados ⇔ existe un camino de u a v

No es necesario que compartan una arista directa. Pueden estar unidos mediante numerosos vértices intermedios.

16.3 Grafo conexo

Un grafo no dirigido es conexo cuando cada par de vértices está conectado por algún camino.

Para todos u, v ∈ V, existe un camino entre u y v

Si existe al menos un par sin camino, el grafo es desconectado.

16.4 Grafo desconectado

Un grafo desconectado queda dividido en grupos de vértices que no pueden alcanzarse entre sí.

SituaciónEstadoEjemplo
Todos los nodos se alcanzanConexoRed operativa
Existen grupos separadosDesconectadoRed partida por una falla
Un nodo tiene grado 0Desconectado, salvo grafo de un nodoEquipo aislado

16.5 Simulación interactiva: rompe y repara la red

En modo Explorar, pulsa un nodo para resaltar todo lo alcanzable desde él. En modo Editar, selecciona dos vértices para agregar o quitar una arista.

Grafo conexo: los 7 vértices son alcanzables desde A.
EstadoConexo
OrigenA
Alcanzables7 / 7
Grupos separados1

Pulsa Cortar puente D—E: la red se divide en dos grupos. Luego entra en modo Editar y vuelve a conectar cualquier nodo de la izquierda con uno de la derecha.

16.6 Alcanzabilidad

El conjunto de vértices alcanzables desde un origen puede obtenerse mediante DFS o BFS. Si la búsqueda visita todos los vértices, el grafo no dirigido es conexo.

visitados desde origen = V ⇒ grafo conexo

Una sola búsqueda es suficiente porque la relación de alcanzabilidad es simétrica en grafos no dirigidos.

16.7 Puentes

Un puente es una arista cuya eliminación aumenta la cantidad de grupos desconectados del grafo.

eliminar un puente ⇒ disminuye la conectividad

En la simulación, D—E es el único enlace entre dos zonas. Su falla separa la red, por lo que constituye un puente.

16.8 Vértices de articulación

Un vértice de articulación es un nodo cuya eliminación, junto con sus aristas, desconecta más el grafo.

Elemento críticoSe eliminaEfecto
PuenteUna aristaAumenta los grupos separados
Vértice de articulaciónUn vértice y sus aristasAumenta los grupos separados

16.9 Conectividad en grafos dirigidos

En dígrafos la dirección introduce varias nociones. Un grafo es fuertemente conexo si cada vértice alcanza a todos los demás respetando los arcos. Es débilmente conexo si se vuelve conexo al ignorar las direcciones.

Fuerte: existe camino dirigido en ambos sentidos entre cada par
Débil: el grafo subyacente no dirigido es conexo

16.10 Comprobar conectividad con BFS

function alcanzables(grafo, origen) {
  const visitados = new Set([origen]);
  const cola = [origen];

  while (cola.length) {
    const actual = cola.shift();
    for (const vecino of grafo[actual]) {
      if (!visitados.has(vecino)) {
        visitados.add(vecino);
        cola.push(vecino);
      }
    }
  }
  return visitados;
}

const grafo = { A: ["B"], B: ["A", "C"], C: ["B"] };
console.log(alcanzables(grafo, "A").size === Object.keys(grafo).length);

16.11 Encontrar un camino

Además de marcar vértices, podemos guardar el predecesor con el que descubrimos cada nodo para reconstruir un camino.

function existeCamino(grafo, origen, destino) {
  const pendientes = [origen];
  const visitados = new Set([origen]);

  while (pendientes.length) {
    const actual = pendientes.shift();
    if (actual === destino) return true;

    for (const vecino of grafo[actual]) {
      if (!visitados.has(vecino)) {
        visitados.add(vecino);
        pendientes.push(vecino);
      }
    }
  }
  return false;
}

16.12 Errores comunes

  • Confundir adyacencia directa con conectividad mediante caminos.
  • Declarar conexo un grafo después de explorar solo una parte.
  • Olvidar marcar los nodos visitados y entrar en ciclos infinitos.
  • Suponer que todo vértice de grado alto es crítico.
  • Confundir conectividad fuerte y débil en grafos dirigidos.
  • Creer que eliminar cualquier arista desconecta un árbol de la misma manera que una red con ciclos.

16.13 Qué debes recordar de este tema

  • Dos vértices están conectados si existe un camino entre ellos.
  • Un grafo no dirigido es conexo si todos sus pares están conectados.
  • DFS o BFS permiten calcular los vértices alcanzables.
  • Un puente es una arista crítica para la conectividad.
  • Un vértice de articulación puede separar la red al eliminarse.
  • Los dígrafos distinguen conectividad fuerte y débil.

16.14 Conclusión

La conectividad permite determinar si una red funciona como un único sistema o está dividida en regiones aisladas. También ayuda a encontrar conexiones y nodos cuya falla puede fragmentarla.

En el próximo tema formalizaremos estos grupos mediante el concepto de componentes conexas.