Cod sursa(job #1181327)

Utilizator azkabancont-vechi azkaban Data 2 mai 2014 15:13:54
Problema Ciclu Eulerian Scor 30
Compilator fpc Status done
Runda Arhiva educationala Marime 2.64 kb
type lista=^celula;
       celula=record
         info:longint;
         pred:lista;
       end;

var lda:array[1..100000] of lista;
    gr : array [1..100000] of longint;
    a,b,n,m,k,i,sol,ok,nr:longint;
    r,v : lista;

procedure add(v:longint; var p:lista);
   var r:lista;
    begin
         new(r);
         r^.info:=v;
         r^.pred:=p;
         p:=r;
    end;

procedure euler(nod : longint);
var r,v : lista;
    key : longint;
begin
    nr:=nr+1;
    if nr<=m then write(nod,' ');
    if lda[nod]<>nil then begin
                              key:=lda[nod]^.info;
                              r:=lda[nod];
                              lda[nod]:=lda[nod]^.pred;
                              dispose(r);
                              gr[nod]:=gr[nod]-1;
                              v:=lda[key];
                              r:=lda[key];
                              if v^.info=nod then begin
                                          r:=v;
                                          lda[key]:=lda[key]^.pred;
                                          dispose(v);
                                          end
                                          else
                              while v<>nil do begin
                                   if v^.info=nod then begin
                                                            r^.pred:=v^.pred;
                                                            dispose(v);
                                                            break;
                                                       end;
                                                            r:=v;
                                                            v:=v^.pred;
                                                       end;
                              gr[key]:=gr[key]-1;
                              euler(key);
                             end;

end;


begin
    assign(input,'ciclueuler.in'); reset(input);
    assign(output,'ciclueuler.out'); rewrite(output);
    readln(n,m);
    for i:=1 to m do begin
                          readln(a,b);
                          add(b,lda[a]);
                          gr[b]:=gr[b]+1;
                          add(a,lda[b]);
                          gr[a]:=gr[a]+1;
                     end;
   ok:=0;
   for i:=1 to n do if gr[i]=1 then begin
                                               writeln('-1');
                                               ok:=1;
                                               break;
                                              end;
   if ok=0 then euler(1);


   close(input);
   close(output);
end.