creación y recorrido

Anuncio
CREACION DE GRAFOS
procedure InsertarNodo(var G:Grafo);
var p:posicion;
begin
new(p);
p^.prim:=nil;
p^.sig:=G;
G:=p;
end;
procedure InsertarArco(a:Arco);
var temp:punt-Arco;
begin
temp:=a.nodo1^.prim;
new(a.nodo1^.prim);
a.nodo1^.prim^.nodo:=a.nodo2;
a.nodo1^.prim^.sig:=temp;
temp:=a.nodo2^.prim;
new(a.nodo2^.prim);
a.nodo2^.prim^.nodo:=a.nodo1;
a.nodo2^.prim^.sig:=temp;
end;
RECORRIDO DE GRAFOS
procedure DepthFirst(p:posicion);
var
actual:punt-Arco;
q:posicion;
begin
process(p);
p^.visitado:=true;
actual:=p^.prim;
while actual<> nil do
begin
q:=actual^.nodo;
if not q^.visitado then
DepthFirst(q);
actual:=actual^.sig;
end;
end;
procedure BreadthFirst(p:posicion);
var
Q:cola(posicion);
n,m:posicion;
begin
crear(Q);
encolar(p,Q);
p^.visitado:=true;
process(p);
while not vacia(Q) do
begin
n:=cabeza(Q);
desencola(Q);
actual:= n^.prim;
while actual<> nil do
begin
m:=actual^.nodo;
if not m^.visitado then
begin
encolar(m,Q);
m^.visitado:=true;
process(m);
end;
actual:=actual^.sig;
end;
end;
end;
procedure DFSpanningTree(p:posicion);
var
actual:punt-Arco;
q:posicion;
begin
p^.visitado:=true;
actual:=p^.prim;
while actual<> nil do
begin
q:=actual^.nodo;
if not q^.visitado then
begin
actual^.marcado=true;
DFSpanningTree(q);
end;
actual:=actual^.sig;
end;
end;
b
g
e
a
i
h
c
d
f
j
a
b
c
d
e
g
j
f
h
i
procedure BFSpanningTree(p:posicion);
var
Q:cola(posicion);
n,m:posicion;
actual:punt-Arco;
begin
crear(Q);
encolar(p,Q);
p^.visitado:=true;
while not vacia(Q) do
begin
n:=cabeza(Q);
desencola(Q);
actual:=n^.prim;
while actual<>nil do
begin
m:=actual^nodo;
if not m^.visitado then
begin
encolar(m,Q);
m^.visitado:=true;
actual^.marcado:=true;
end;
actual:=actual^.sig;
end;
end;
end;
b
g
e
a
i
h
c
d
f
j
a
g
c
e
b
d
h
i
j
f
c-b
c
b-a
b
a-b
a
d
e
a-e
b-c
c-d
a-h
b-e
c-e
c-f
d-c
e-a
j-f
j
i-h
i
h-a
h
g-e
g
f-c
f
e-b
e-c
e-g
e-h
f-j
g-j
h-e
h-i
j-g
h-j
j-h
Descargar