Todo grafo se construye con dos componentes: vértices que representan objetos y aristas que expresan relaciones. Comprenderlos permite traducir un problema real a una estructura que un programa puede procesar.
Un grafo permite describir elementos conectados sin depender de su forma o posición física. Sus dos componentes fundamentales son los vértices y las aristas.
Si representamos una red social, las personas pueden ser vértices y sus amistades, aristas. En un mapa, las ciudades pueden ser vértices y las carreteras, aristas. Elegir correctamente qué representa cada componente es el primer paso para resolver un problema con grafos.
Un vértice es una unidad individual del grafo. También suele llamarse nodo. Matemáticamente, todos los vértices forman un conjunto denominado V.
Los nombres A, B, C y D son identificadores. Cada vértice puede guardar además información: una persona puede tener nombre y edad; una ciudad, coordenadas; un servidor, dirección IP y estado.
Una arista conecta dos vértices y representa una relación entre ellos. El conjunto de todas las aristas se denomina E. Se utiliza la letra E porque proviene del término inglés edges (aristas).
La arista {A, B} indica que A y B están conectados. En este ejemplo usamos relaciones sin dirección: conectar A con B equivale a conectar B con A. Los grafos dirigidos se estudiarán en el próximo tema.
Un grafo G queda definido por su conjunto de vértices y su conjunto de aristas.
En un dibujo, la ubicación de los nodos puede cambiar sin alterar el grafo. Lo importante es cuáles vértices existen y cuáles pares están conectados.
Utiliza la simulación para experimentar. En Agregar vértice, pulsa sobre un espacio vacío. En Conectar, pulsa dos vértices. También puedes arrastrar los nodos y seleccionarlos para consultar sus conexiones.
Observa que mover un vértice cambia el dibujo, pero no cambia el grafo: las aristas siguen conectando los mismos pares. En cambio, agregar una arista sí modifica su estructura.
Una arista es incidente en los vértices que conecta. Si existe la arista {A, B}, esa arista incide en A y en B. A su vez, A y B son vértices adyacentes.
| Concepto | Pregunta que responde | Ejemplo |
|---|---|---|
| Incidencia | ¿Qué vértices toca esta arista? | {A, B} incide en A y B |
| Adyacencia de vértices | ¿Estos vértices comparten una arista? | A es adyacente a B |
| Vecindad | ¿Qué vértices están conectados directamente? | Vecinos de A: B y C |
El grado de un vértice indica cuántas aristas inciden en él. En la simulación, selecciona un vértice para ver su grado y la lista de vecinos.
El grado permite detectar nodos muy conectados, extremos de una red o vértices aislados. Este concepto se desarrollará con más detalle en el tema 13.
Un vértice con grado cero se denomina aislado: pertenece al grafo, pero no está conectado con ningún otro. Un vértice con grado uno suele llamarse hoja, especialmente cuando trabajamos con árboles.
Agrega un vértice en la simulación y déjalo sin conectar para crear un vértice aislado.
Una forma sencilla de almacenar un grafo consiste en usar un arreglo para los vértices y otro para las aristas.
const vertices = ["A", "B", "C", "D"];
const aristas = [
["A", "B"],
["A", "C"],
["B", "D"]
];
function vecinosDe(vertice) {
return aristas
.filter(([a, b]) => a === vertice || b === vertice)
.map(([a, b]) => a === vertice ? b : a);
}
console.log("Vecinos de A:", vecinosDe("A"));
console.log("Grado de A:", vecinosDe("A").length);
Esta representación es fácil de comprender. Más adelante veremos listas y matrices de adyacencia, que ofrecen distintas ventajas según las operaciones necesarias.
En programas reales, un vértice suele ser un objeto con propiedades. Las aristas también pueden almacenar información, como una distancia, un costo o el tipo de relación.
const ciudades = [
{ id: "COR", nombre: "Córdoba", habitantes: 1565000 },
{ id: "ROS", nombre: "Rosario", habitantes: 1342000 }
];
const ruta = {
origen: "COR",
destino: "ROS",
distanciaKm: 400
};
console.log(`${ruta.origen} → ${ruta.destino}: ${ruta.distanciaKm} km`);
La estructura matemática sigue siendo un grafo, pero sus datos permiten responder preguntas específicas de la aplicación.
La elección depende de la pregunta que debe responder el programa. Un mismo sistema puede dar origen a grafos distintos.
| Objetivo | Vértices | Aristas |
|---|---|---|
| Calcular rutas de transporte | Paradas | Tramos disponibles |
| Analizar transferencias | Cuentas | Operaciones realizadas |
| Construir recomendaciones | Usuarios y productos | Compras o valoraciones |
| Ordenar tareas | Tareas | Dependencias |
No existe una única representación correcta: existe una representación adecuada para la pregunta que queremos resolver.
Vértices y aristas forman el vocabulario básico de la teoría de grafos. Con ellos podemos convertir personas, ciudades, archivos o dispositivos en una estructura común y procesable.
En el próximo tema distinguiremos grafos dirigidos y no dirigidos, según si sus relaciones tienen o no un sentido definido.