Pagini recente » Cod sursa (job #1539028) | Cod sursa (job #1370912) | Cod sursa (job #821659) | Cod sursa (job #1379854) | Cod sursa (job #270852)
Cod sursa(job #270852)
{graf eulerian -> toate muchiile sunt vizitate o singura data}
{TEOREMA:
Un graf e eulerian daca e conex si d[i]=par oricare ar fi i din X}
type pnod=^nod;
nod=record
info:longint;
urm:pnod;
end;
var v:array[1..100001]of pnod;
gr,sol,c:array[1..100001]of integer;
i,a,b,m,n,vf:longint;
f,g:text;
function eulerian:boolean;
var i:longint;
begin
eulerian:=true;
for i:=1 to n do
if (gr[i] mod 2=1)or(gr[i]=0)then begin
eulerian:=false;
break;end;
end;
procedure adaug(var p:pnod;x:longint);
var q:pnod;
begin
new(q);
q^.info:=x;
if p=nil then begin
q^.urm:=nil;
p:=q;
end
else begin
q^.urm:=p;
p:=q;
end;
end;
procedure elimin(x,y:longint);
var q,qq:pnod;
begin
q:=v[x];
v[x]:=v[x]^.urm;
dispose(q);
if v[y]^.info=x then begin
q:=v[y];
v[y]:=v[y]^.urm;
dispose(q);
end
else begin
q:=v[y];
while q^.urm^.info<>x do q:=q^.urm;
qq:=q^.urm;
q^.urm:=qq^.urm;
dispose(qq);
end;
end;
begin
assign(f,'ciclueuler.in');reset(f);
assign(g,'ciclueuler.out');rewrite(g);
read(f,n,m);
for i:=1 to m do begin
read(f,a,b);
adaug(v[a],b);
adaug(v[b],a);
inc(gr[a]);inc(gr[b]);
end;
if not eulerian then write(g,'-1')
else begin
vf:=1;b:=0;
c[vf]:=1;
while vf<>0 do begin
a:=c[vf];
if v[a]<>nil then begin
inc(vf);
c[vf]:=v[a]^.info;
elimin(a,v[a]^.info);
end
else begin
inc(b);
sol[b]:=c[vf];
dec(vf);
end;
end;
for i:=1 to b-1 do write(g,sol[i],' ');
end;
close(g);
end.