Hej mam problem z algorytmem przeszukiwania grafów DFS ?( w glab) na podstawie macierzy sasiedztw.. cos tam wiem ale nie wiem czy jest to poprawne myslenie, jak z tego np odczytac liczbe komponent albo czy graf jest spojny ponizej zamiescilam swoj kod

program nasz;

{$APPTYPE CONSOLE}

uses
SysUtils;

const
maxn=10000;
type
element1=longword;
element2=string[2];

tab2=array[1..maxn,1..maxn] of element1;
tab1=array[1..maxn] of element2;

var a:tab2;
b:tab1;
n,i,j,p,x:element1;

procedure generuj_macierz_sas(var a:tab2;n:longword);
var i,j:longword;

begin
for i:=1 to n do
a[i,i]:=0;

for i:=1 to n-1 do
for j:=i+1 to n do
a[i,j]:=random(2);

for i:=1 to n do
for j:=1 to n do
if i>j then a[i,j]:=a[j,i];

end;
//------------------------------------------------------------------------------

procedure wypisz_tab(var a:tab2;n:longword);
var i,j: longword;

begin
for i:=1 to n do
begin
writeln;
for j:=1 to n do
write(a[i,j],' ');
end;
end;

//------------------------------------------------------------------------------
procedure wypisz_tab1(var b:tab1;n:longword);
var i,j: longword;

begin
for i:=1 to n do
writeln(b[i]);

end;

//------------------------------------------------------------------------------

procedure tworz_tab1( var b:tab1; n:longword);
var i,j:longword;

begin
for i:=1 to n do
b[i]:='F';
end;
//------------------------------------------------------------------------------

procedure DFS(var a:tab2; var b:tab1;n:element1; x:element1);
var i:longword;
begin

*b[x]:='T';*nie wiem czy to jest potrzebne wg mnie nie !
for i:=x to n do
for j:=1 to n do
begin
if (b[i]='F') and (a[i,j]=1) then
begin
b[i]:='T';
DFS(a,b,n,j);
end;
end;

end;

begin
randomize;
writeln('Podaj liczbe wierzcholkow, nie wieksza niz ', maxn,' : ');
readln(n);
writeln('Podaj x : ');
readln(x);
generuj_macierz_sas(a,n);
wypisz_tab(a,n);
writeln;
writeln;
tworz_tab1(b,n);
//DFS(a,b,n,i,j);
DFS(a,b,n,x);
writeln;
wypisz_tab1(b,n);
readln;

end.

prosze szybko o wskazowki z gory dzieki!!!