Estático

uGrafo.pas

unit uGrafo;
    
interface
    
    type
        TGrafo = RECORD
            datos; array[INI..FIN, INI..FIN] of integer;  // Matriz datos
            numNodos: integer;  // Orden de la submatriz
        END;

implementation

    // Inicializar toda la matriz a 0
    procedure crearGrafoVacio(var g:TGrafo); 
    var i, j:TElemento;
    begin
        for i:=INI to FIN do
            for j:=INI to FIN do
                g.data[i,j] := 0;
        g.numNodos := 0;
    end;
    

    procedure insertarNodo(var g:TGrafo; e:TElementoNodo); begin
        g.numNodos := g.numNodos+1;
    end;

    // Se asume que los nodos existen y estan dentro del rango de nodos del grafo
    procedure crearArista(var g:TGrafo; n1, n2:TElemento; peso:integer); begin
        crearAristaDir(g, n1, n2, peso);
        crearAristaDir(g, n2, n1, peso);
    end;
    procedure crearAristaDir(var g:TGrafo; n1, n2:TElemento; peso:integer); begin
        g.data[n1,n2] := peso;
    end;
    
end.

uElemento.pas

unit uElemento;
    
interface
    type
        TElemento = INI..FIN;
implementation
    
end.

Dinámico

Versión normal

uGrafo.pas Contiene la lista de nodos del grafo
unit uGrafo;

interface
		uses uVertice;
		type
				TGrafo = ^TNodo;
				TNodo = RECORD
						info:TVertice;  // Vertice (elemento y lista de aristas)
						sig:^TNodo;  // Siguiente nodo de la lista
				END;
implementation

end.
uVertice.pas → Contiene los datos del elemento y las aristas del vertice/nodo
unit uVertice;

interface
		uses uElemento, uListaA;
		type
				TVertice = RECORD
						vertice:TElemento;  // Elemento representado por el grafo
						aristas:TListaA;  // Lista dinamica de aristas
				END;
implementation

end.
uElemento.pas → Contiene los datos del elemento representado por el grafo (carreteras, almacenes, etc…)
ℹ️
El contenido de esta unidad depende el el caso de uso (datos de un almacen, una ciudad, etc…)
 
uListaA.pas → Lista dinámica para la lista de aristas
ℹ️
Esta es una lista enlazada normal que tiene TArista como su elemento
 
uArista.pas → Contine la información respectiva al vertice de destino y la ponderación de la arista
unit uArista;

interface
		uses uElemento;
		type
				TArista = RECORD
						dest:TElementoID;  // Identificador del nodo de destino
						pond:integer;  // Ponderación de la arista
				END;
implementation

end.

Versión reducida

uGrafo.pas Contiene la lista de nodos del grafo con los elementos y sus aristas
unit uGrafo;

interface
		uses uElemento, uListaA;
		type
				TGrafo = ^TNodo;
				TNodo = RECORD
						info:TElemento;  // Elemento representado por el grafo
						aristas:TListaA;  // Lista de aristas
						sig:^TNodo;  // Siguiente nodo de la lista
				END;
implementation

end.
uElemento.pas → Contiene los datos del elemento representado por el grafo (carreteras, almacenes, etc…)
ℹ️
El contenido de esta unidad depende el el caso de uso (datos de un almacen, una ciudad, etc…)
 
uListaA.pas → Lista dinámica para la lista de aristas
ℹ️
Esta es una lista enlazada normal que tiene TArista como su elemento
 
uArista.pas → Contine la información respectiva al vertice de destino y la ponderación de la arista
unit uArista;

interface
		uses uElemento;
		type
				TArista = RECORD
						dest:TElementoID;  // Identificador del nodo de destino
						pond:integer;  // Ponderación de la arista
				END;
implementation

end.