DEFINITION MODULE DiGrafo;

FROM TadNodo IMPORT NODO;

TYPE GRAFO;
     TIPO_ERROR = <<a definir>>;

PROCEDURE Error(): TIPO_ERROR;

PROCEDURE Crear(): GRAFO;

PROCEDURE EsVacio(g: GRAFO): BOOLEAN;
PROCEDURE Pertenece(g: GRAFO; n: NODO): BOOLEAN;
PROCEDURE NumNodos(g: GRAFO): CARDINAL;
PROCEDURE NumArcos(g: GRAFO): CARDINAL;
PROCEDURE Adyacentes(g: GRAFO; n1, n2: NODO): BOOLEAN;

(* Pre: NOT Pertenece(g, n) *)
PROCEDURE AnyadirNodo (VAR g: GRAFO; n: NODO);
(* Pre: Pertenece(g, n) *)
PROCEDURE BorrarNodo(VAR g: GRAFO; n: NODO);

(* Pre: Pertenece(g, n1) AND Pertenece(g, n2) AND NOT Adyacentes(g, n1, n2) *)
PROCEDURE Conectar (VAR g: GRAFO; n1,n2: NODO)
(* Pre: Adyacentes(g, n1, n2) *)
PROCEDURE Desconectar(VAR g: GRAFO; n1,n2: NODO);

PROCEDURE Inicializar(g: GRAFO);
PROCEDURE Elemento(g: GRAFO): NODO;

PROCEDURE Destruir(VAR g: GRAFO);

PROCEDURE Copiar (VAR g1: GRAFO; g2: GRAFO);

END DiGrafo.
