El tipo abstracto de datos de los grafos en Haskell

Continuando la serie dedicada a los tipos de datos abstractos (TAD) en Haskell, hoy le toca el turno a los grafos. En los próximos, estudiaremos algoritmos sobre grafos basados en este TAD.

Informalmente, un grafo es un conjunto de objetos llamados vértices o nodos unidos por enlaces llamados aristas o arcos.

El contenido del este artículo es el siguiente:

  • la signatura del TAD de los grafos;
  • la implementación de los grafos mediante vectores de adyacencia y
  • la implementación de los grafos mediante matrices de adyacencia.

La signatura del TAD de los grafos

Las signatura de las operaciones del TAD de los grafos son las siguientes:

con el siguiente significado

  • (creaGrafo d cs as) es un grafo (dirigido si d es True y no dirigido en caso contrario), con el par de cotas cs y listas de aristas as (cada arista es un trío formado por los dos vértices y su peso).
  • (adyacentes g v) es la lista de los vértices adyacentes al nodo v en el grafo g.
  • (nodos g) es la lista de todos los nodos del grafo g.
  • (aristasND g) es la lista de las aristas del grafo no dirigido g.
  • (aristasD g) es la lista de las aristas del grafo dirigido g.
  • (aristaEn g a) se verifica si a es una arista del grafo g.
  • (peso v1 v2 g) es el peso de la arista que une los vértices v1 y v2 en el grafo g.

Por ejemplo,

crea el grafo

Implementación de los grafos mediante vectores de adyacencia

Implementación de los grafos mediante matrices de adyacencia

El objetivo de la serie es la elaboración de los temas de TAD del curso de Informática del Grado en Matemáticas.