Construcción de Grafos: Método Lista de Adyacencia en JavaScript
Clase 28 de 29 • Curso de Estructuras de Datos con JavaScript
Contenido del curso
Arrays y strings
- 4

Cómo funcionan arrays en memoria de JavaScript
07:23 min - 5

Construcción de Arrays con Clases en JavaScript
09:33 min - 6

Métodos pop y delete en arrays
16:01 min - 7
Playground: crea tu propia implementación de unshift
- 8
Playground: crea tu propia implementación de shift
- 9

Inmutabilidad de Strings y Almacenamiento en Memoria
02:42 min
Hash Table
Linked List
- 15

Estructuras de Datos: Listas Enlazadas en JavaScript
05:20 min - 16

Estructura y Creación de una Lista Enlazada Simple en JavaScript
10:03 min - 17

Métodos para Manipular Nodos en Listas Enlazadas
12:12 min - 18

Inserta nodos intermedios sin romper enlaces en JavaScript
16:08 min - 19

Doubly Linked List con punteros bidireccionales
07:51 min
Stacks
Queues
Trees
Graphs
Cierre
Construir un grafo no dirigido en JavaScript es más simple de lo que parece: con una representación tipo JSON List (objeto con arrays), un constructor claro y dos métodos (addVertex y addEdge), obtienes una estructura sólida para practicar lógica y conexiones entre datos. Aquí verás los pasos exactos, el código mínimo y cómo validar las relaciones entre nodos.
¿Cómo modelar un grafo no dirigido con adjacent list en JavaScript?
Un grafo se compone de vértices (nodos) y bordes (conexiones o edges). La clase inicia sin valor y usa un objeto para mapear cada nodo a un array con sus vecinos. Además, mantiene un contador de nodos para ubicar por índice.
¿Qué hace el constructor y cómo se representa con JSON List?
- Crea la instancia del grafo sin valor inicial.
- Define dis.nodos para el conteo de vértices.
- Define dis.jsonList como objeto: cada clave es un nodo y su valor es un array de conexiones.
class Grafo {
constructor() {
this.nodos = 0;
this.jsonList = {}; // representación tipo *JSON List*: objeto de arrays
}
addVertex(nodo) {
this.jsonList[nodo] = []; // cada vértice inicia con un array vacío
this.nodos++;
}
addEdge(n1, n2) {
// grafo no dirigido: se agregan ambas conexiones con *push*
this.jsonList[n1].push(n2);
this.jsonList[n2].push(n1);
}
}
¿Qué implica usar índices y arrays en la estructura?
- Cada nodo es una clave del objeto: índice legible y directo.
- Cada array lista a qué nodos conecta ese vértice.
- Con push agregas vecinos sin duplicar estructura.
¿Cómo agregar vértices y bordes (edges) paso a paso?
Primero se crean los vértices; luego se conectan con bordes. La verificación final confirma que la adjacent list refleja exactamente las conexiones esperadas.
const g = new Grafo();
// 1) Agregar vértices (vértices: 1, 3, 4, 5, 6, 8)
[1, 3, 4, 5, 6, 8].forEach(v => g.addVertex(v));
// 2) Agregar bordes para un grafo no dirigido
// conexiones validadas posteriormente en la *adjacent list*
g.addEdge(1, 6);
g.addEdge(1, 3);
g.addEdge(1, 4);
g.addEdge(3, 5);
g.addEdge(3, 6);
g.addEdge(4, 5);
g.addEdge(4, 8);
console.log(g.jsonList);
/*
{
1: [6, 3, 4],
3: [5, 6, 1],
4: [1, 5, 8],
5: [3, 4],
6: [3, 1],
8: [4]
}
*/
¿Cómo validar la adjacent list final por índice?
- 1 conecta con 6, 3, 4.
- 3 conecta con 5, 6, 1.
- 4 conecta con 1, 5, 8.
- 5 conecta con 3, 4.
- 6 conecta con 3, 1.
- 8 conecta con 4.
En un grafo no dirigido, cada borde aparece en ambos sentidos: la lógica de addEdge asegura la simetría agregando con push en los dos arrays involucrados.
¿Qué habilidades y conceptos refuerzas con este ejercicio?
Este ejercicio potencia tu comprensión práctica de estructuras de datos y su implementación en código sencillo pero preciso. Se trabaja desde la instanciación de clases y el constructor, hasta la representación con índices y arrays.
¿Qué habilidades técnicas aplicas en JavaScript?
- Diseño de una clase con estado interno: nodos y JSON List.
- Modelado de grafos con objeto de arrays: representación tipo adjacent list.
- Implementación de métodos: addVertex para crear vértices y addEdge para conectar nodos.
- Mutación controlada de colecciones con push.
- Verificación manual de conexiones por índice: lectura y comparación rápida.
¿Qué conceptos clave quedan claros?
- Grafo no dirigido: cada conexión es bidireccional por definición de edge.
- Vértices vs. bordes: primero agregas nodos, luego conectas relaciones.
- Lógica incremental: construir, probar, validar y ajustar con pocas líneas.
- Simplicidad efectiva: la claridad de la representación facilita depuración y expansión.
¿Te animas a probar una variante? puedes intentar un grafo dirigido o crear nuevas conexiones y comentar cómo cambió tu adjacent list. ¡Comparte tus resultados y dudas!