Esta publicación cubrirá estructura de datos del graph implementación en C usando una lista de adyacencia. La publicación cubrirá la implementación ponderada y no ponderada de graphs dirigidos y no dirigidos.

En la representación de la lista de adyacencia del graph, cada vértice del graph está asociado con la colección de sus vértices o aristas vecinos, es decir, cada vértice almacena una lista de vértices adyacentes.

Directed Graph

Por ejemplo, para el graph anterior, a continuación se muestra la representación pictórica de la lista de adyacencia:

 
Adjacency List

1. Implementación de graph dirigidos

A continuación se muestra la implementación en C de un graph dirigido usando una lista de adyacencia:

Descargar  Ejecutar código

Resultado:

(0 —> 1)
(1 —> 2)
(2 —> 1) (2 —> 0)
(3 —> 2)
(4 —> 5)
(5 —> 4)

 

Como se desprende del código anterior, en un graph dirigido, solo creamos un borde a partir de src a dest en la lista de adyacencia. Ahora, si el graph no está dirigido, también necesitamos crear una arista a partir de dest a src en la lista de adyacencia, como se muestra a continuación:

Descargar  Ejecutar código

Resultado:

(0 —> 2)    (0 —> 1)
(1 —> 2)    (1 —> 2)    (1 —> 0)
(2 —> 3)    (2 —> 1)    (2 —> 0)    (2 —> 1)
(3 —> 2)
(4 —> 5)    (4 —> 5)
(5 —> 4)    (5 —> 4)

2. Implementación de graph dirigidos ponderados

En un graph ponderado, cada borde tendrá un peso (o costo) asociado, como se muestra a continuación:

Weighted Directed Graph

A continuación se muestra la implementación de un graph dirigido ponderado en C utilizando la lista de adyacencia. La implementación es similar a la de un graph dirigido no ponderado, excepto que también almacenamos inarray de peso junto con cada borde.

Descargar  Ejecutar código

Resultado:

0 —> 1 (6)
1 —> 2 (7)
2 —> 1 (4)    2 —> 0 (5)
3 —> 2 (10)
4 —> 5 (1)
5 —> 4 (3)

 
Para graphs ponderados no dirigidos (como se vio antes para graphs no ponderados no dirigidos), cree una ruta desde dest a src también en la lista de adyacencia. La implementación completa se puede ver aquí.

 
Ver también:

Implementación de graph en C++ (sin usar STL)

Implementación de grafos en C++ usando STL

Implementación de grafos en Java usando Colecciones

Implementación de graph en Python