Pagini recente » Cod sursa (job #2979267) | Cod sursa (job #364499) | Cod sursa (job #3154811) | Cod sursa (job #48317) | Cod sursa (job #713895)
Cod sursa(job #713895)
program ciclueuler;
type pnod=^nod;
nod=record inf,nro:integer; urm:pnod; end;
muchie=record ns,nd,cate:integer; end;
var fi,fo:Text;
bufin,bufout:array[1..1 shl 17]of char;
m,n,ind,i,nrm,unde:integer;
l:array[1..100000]of pnod;
trecut:array[1..100000]of 0..1;
sol:array[1..100000]of integer;
muchii:array[1..100000]of muchie;
procedure push_back(nod,vecin,muchie:integer);
var p:pnod;
begin
new(p); p^.inf:=vecin; p^.nro:=muchie; p^.urm:=l[nod]; l[nod]:=p;
end;
function cauta(x,y:integer):integer;
var i:integer;
begin
cauta:=0;
for i:=1 to nrm do
with muchii[i] do
if ((ns=x) and (nd=y)) or
((nd=x) and (ns=y)) then
begin
cauta:=i;
exit;
end;
end;
procedure citire;
var i,x,y:integer;
begin
readln(fi,n,m);
for i:=1 to m do
begin
readln(fi,x,y);
unde:=cauta(x,y);
if unde=0 then
begin
inc(nrm);
muchii[nrm].ns:=x; muchii[nrm].nd:=y; inc(muchii[nrm].cate);
end
else
begin
inc(muchii[unde].cate);
end;
push_back(x,y,i);
push_back(y,x,i);
end;
end;
procedure euler(nod:integer);
var p:pnod;
begin
trecut[nod]:=1;
p:=l[nod];
while p<>nil do
begin
unde:=cauta(nod,p^.inf);
if muchii[unde].cate>0 then
begin
dec(muchii[unde].cate);
euler(p^.inf);
end;
p:=p^.urm;
end;
inc(ind);
sol[ind]:=nod;
end;
begin
assign(fi,'ciclueuler.in'); reset(fi); settextbuf(fi,bufin);
assign(fo,'ciclueuler.out'); rewrite(fo); settextbuf(fo,bufout);
citire;
for i:=1 to n do
if trecut[i]=0 then
euler(i);
for i:=1 to ind-1 do
write(fo,sol[i],' ');
close(fi); close(fo);
end.