Cod sursa(job #903239)

Utilizator Dddarius95Darius-Florentin Neatu Dddarius95 Data 1 martie 2013 19:22:50
Problema Parcurgere DFS - componente conexe Scor 0
Compilator fpc Status done
Runda Arhiva educationala Marime 1.57 kb
program grafflat;
type vect=array[0..10000] of integer;
var x,y,v:vect;
    n,m,i,j,nr:integer;
    f,g:text;
procedure citire;
var i:longint;
begin
readln(f,n,m);
for i:=1 to n do v[i]:=i;
for i:=0 to m-1 do readln(f,x[i],y[i]);
end;

function cel_mic(a,b:integer):integer;
begin
if a>b then cel_mic:=b
       else cel_mic:=a;
end;

function cel_mare(a,b:integer):integer;
begin
if a>b then cel_mare:=a
       else cel_mare:=b;
end;

procedure desc_in_comp_conexe;
var i,j,min,max,copie:integer;
begin
for i:=0 to m do
  begin
  min:=cel_mic(x[i],y[i]); max:=cel_mare(x[i],y[i]);
  if v[min]<>0 then
   if v[max]<>0 then
                     begin
                     copie:=v[max];
                     for j:=1 to n do if v[j]=copie then v[j]:=v[min];
                     end
                else v[max]:=v[min];
  if (v[min]=0)then
   if v[max]<>0 then v[min]:=v[max]
                else begin
                     v[min]:=min;
                     v[max]:=min;
                     end;

  end;
end;

procedure afisare;
var nrc,i,j:integer;
begin
for i:=1 to n do write(g,v[i],' ');writeln(g);
nr:=0;
for i:=1 to n-1 do
 if v[i]=i then
               begin
               inc(nr);
            //   write(g,'Comp no. ',nr,': ',i,' ');
           //    for j:=i+1 to n do
           //      if v[j]=v[i] then write(g,j,' ');
          //     writeln(g);
               end;
writeln(g,nr);
end;

begin
assign(f,'dfs.in');reset(f);
assign(g,'dfs.out');rewrite(g);
citire;
desc_in_comp_conexe;
afisare;
close(f);
close(g);
end.