Cod sursa(job #1347476)

Utilizator mariusadamMarius Adam mariusadam Data 18 februarie 2015 23:20:55
Problema Ciclu Eulerian Scor 10
Compilator fpc Status done
Runda Arhiva educationala Marime 1.11 kb
program graf_eulerian;
var //t:array[0..1,1..1000000] of longint;
    eul:array[1..1000000] of longint;
    a:array[1..10000,1..10000] of 0..1;
    bufin,bufout:array[1..5000001] of byte;
    n,m,k,i,p,j,sf:longint;
    f,g:text;

procedure citire;
var i,j,k:longint;
begin
 assign(f,'ciclueuler.in'); reset(f);
 assign(g,'ciclueuler.out'); rewrite(g);
 settextbuf(f,bufin);
 settextbuf(f,bufout);
 readln(f,n,m);
 {for k:=1 to m do
  begin
   readln(f,i,j);
   t[0,k]:=j;
   t[1,k]:=start[i];
   start[i]:=k;
   t[0,k]:=i;
   t[1,k]:=start[i];
   start[j]:=k;
  end;}
  for k:=1 to m do
   begin
    readln(f,i,j);
    a[i,j]:=1;
    a[j,i]:=1;
   end;
 close(f);
end;

procedure ciclu(p:longint);
begin
 for k:=1 to n do
  if a[eul[p],k]=1 then
   begin
    a[eul[p],k]:=0;
    a[k,eul[p]]:=0;
    sf:=sf+1;
    for j:=sf downto p+1 do
     eul[j]:=eul[j-1];
    eul[p+1]:=k;
    p:=p+1;
    ciclu(p);
   end;
end;

begin
 citire;
 eul[1]:=1;
 sf:=1;
 i:=1;
 while eul[i]<>0 do
  begin
   ciclu(i);
   i:=i+1;
  end;
 for i:=1 to sf do
  write(g,eul[i],' ');
 close(g);
end.