Los detalles de la pregunta no son del todo específicos, pero intentaré responder.
La mejor manera de mantener un gráfico dirigido es una lista de adyacencia, una matriz de adyacencia o una lista de bordes. Utilizaremos el siguiente gráfico como ejemplo:
- En la complejidad temporal de un algoritmo, ¿por qué puede considerarse útil que una operación elemental tome "tiempo unitario"?
- Tiene una lista vinculada en la que cada nodo es otra lista vinculada. ¿Cómo encuentra el elemento Kth más exclusivo entre todos los nodos en el momento más óptimo?
- Cómo explicar el uso e implementación de una variable estática en C a un principiante
- ¿Es posible crear un algoritmo de proximidad a la muerte?
- ¿Por qué las estructuras de datos y los algoritmos son tan importantes en informática?
(Fuente: Archivo: gráfico acíclico dirigido 2.svg)
Lista de adyacencia: para cada nodo, una matriz contiene los vecinos de ese nodo. En un gráfico dirigido, solo serían todos los nodos adyacentes al nodo actual (apuntando de actual a adyacente). Para el gráfico anterior, la lista de adyacencia se vería así:
Nodo – [sus vecinos]
2: []
3: [8,10]
5: [11]
7: [8,11]
8: [9]
9: []
10: []
11: [2,9,10]
Matriz de adyacencia: es una matriz de tamaño N por N (donde N es el número de nodos) y el valor en (i, j) es 1 si hay una ruta que va de i -> j y 0 si no.
Podemos ver que (3,10) es 1 porque hay una ruta desde el nodo 3 -> nodo 10.
Finalmente, Lista de bordes: esta es una matriz de pares de enteros (a, b) que denotan un borde de a -> b. Un ejemplo es:
{[3,8], [3,10], [5,11], [7,8], [7,11], [8,9], [11,2], [11,9], [ 11,10]}
Puede leer sobre la implementación de estos (en JavaScript) aquí: Estructuras de datos en JavaScript y un proyecto Github aquí: chenglou / data-estructuras
¡Buena suerte! Y si necesita ayuda para comprender los conceptos, puede comentar a continuación o enviarme un PM.