Cod sursa(job #1627997)

Utilizator DoubleNyNinicu Cristian DoubleNy Data 3 martie 2016 20:09:22
Problema Ciclu Eulerian Scor 0
Compilator fpc Status done
Runda Arhiva educationala Marime 1.86 kb
type edge=record
      x,y:integer;
     end;
var
   edges:array[1..100] of edge;
   degree,lista:array[1..100] of integer;
   i,j,m,n,noduri,muchii,neigh,u:integer;

function next(x:integer):integer;
var i,j:integer;
begin
     for i:=1 to muchii do
     if edges[i].x=x then
     begin
          next:=edges[i].y;
          exit;
     end;

     for i:=1 to muchii do
     if edges[i].y=x then
     begin
          next:=edges[i].x;
          exit;
     end;


end;

procedure erase(a,b:integer);
var i,j:integer;
begin
     for i:=1 to muchii do
     if (edges[i].x=a) and (edges[i].y=b) then
     begin
          edges[i].x:=0;
          edges[i].y:=0;
          break;
     end;
     for j:=i to muchii do
     begin
          edges[j].x:=edges[j+1].x;
          edges[j].y:=edges[j+1].y;
     end;
     dec(muchii);
     fillchar(degree,sizeof(degree),0);
     for i:=1 to noduri do
    begin
        for j:=1 to muchii do
        if (edges[j].x=i) or (edges[j].y=i) then inc(degree[i]);
    end;
end;
procedure push(n:integer);

begin
    lista[u]:=n;
    inc(u);
end;

procedure Euler(nod:integer);
var m:integer;
begin
    while (degree[nod]>0) do
    begin
        neigh:=next(nod);
        erase(nod,neigh);
        euler(neigh);
    end;
    push(nod);
end;


BEGIN
    assign(input,'ciclueuler.in'); reset(input);
    assign(output,'ciclueuler.out'); rewrite(output);
    readln(input,noduri,muchii);
    for i:=1 to muchii do
    readln(input,edges[i].x,edges[i].y);
    fillchar(degree,sizeof(degree),0);
    u:=1;
    fillchar(lista,sizeof(lista),0);
    for i:=1 to noduri do
    begin
        for j:=1 to muchii do
        if (edges[j].x=i) or (edges[j].y=i) then inc(degree[i]);
    end;
    Euler(1);
    for i:=1 to u-2 do write(output,lista[i]);
    close(input);
    close(output);


END.