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