¿Dónde puedo encontrar una biblioteca de estructura de datos de gráficos dirigida, implementada en Javascript?

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:

(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.

Todo lo que he encontrado hasta ahora es https://github.com/chenglou/data … La biblioteca parece admitir gráficos dirigidos, pero carece de muchas de las cosas que puede esperar, como las funciones para navegar por el gráfico.

¿Has encontrado algo mejor? Estoy buscando algo que pueda decirme los tipos de borde (cruzado, árbol, adelante, atrás) según el recorrido del gráfico.

Recomendaría usar Graphology para implementar su Gráfico Dirigido. La documentación es excelente y parece muy robusta.

Desde su sitio:

graphology es una implementación de especificación y referencia para un objeto Graph robusto y multipropósito.

Su objetivo es admitir varios tipos de gráficos con la misma interfaz unificada.

Por lo tanto, un gráfico de graphology puede ser dirigido, no dirigido o mezclado y puede ser simple o soportar bordes paralelos.

Junto con esas especificaciones, también encontrará una biblioteca estándar llena de algoritmos de teoría de gráficos y utilidades comunes como generadores de gráficos, diseños, etc.