program adjlist; { Nachbarschafts-Liste eines ungerichteten Graphen } uses crt; const maxV = 'm'; type link = ^node; node = record v : char; next : link; end; var V,E,i : integer; t,z : link; adj_liste : array['a'..maxV] of link; v1,v2,j : char; procedure read_adj_liste; begin write('Anzahl der Knoten und Kanten des Graphen : '); readln(V,E); writeln;writeln; new(z); z^.next:=z; for j:='a' to maxV do adj_liste[j]:=z; for i:=1 to E do begin write('die ',i:2,'. Kante geht von : '); readln(v1); write(' nach : '); readln(v2); new(t); t^.v:=v1 ; t^.next:=adj_liste[v2] ; adj_liste[v2]:=t ; new(t); t^.v:=v2 ; t^.next:=adj_liste[v1] ; adj_liste[v1]:=t ; end; end; procedure print_adj_liste(Knoten : char); var g: char; h: link; begin new(h); for g:='a' to Knoten do begin h:=adj_liste[g]; write('Knoten ',g,' : '); while (h^.next<>h ) do begin write(h^.v ,'---'); h:=h^.next; end; writeln('ende'); end; end; procedure list_dfs; var id, k : char; val : array['a'..maxV] of char; procedure visit(k:char); var t: link; begin id:=chr(ord(id)+1); val[k]:=id; t:=adj_liste[k]; while t<>t^.next do begin if val[t^.v]=' ' then begin write(t^.v,'--'); visit(t^.v) end; t:=t^.next; end; end; begin id:='a'; for k:='a' to maxV do val[k]:=' '; for k:='a' to maxV do if val[k]=' ' then begin writeln; visit(k); writeln(k); end; end; begin clrscr; read_adj_liste; readln; clrscr; print_adj_liste(maxV); readln; writeln(' Jetzt erfolgt Tiefensuche . ');writeln; list_dfs; readln; end.