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