Pagini recente » Cod sursa (job #435878) | Cod sursa (job #1359466) | Cod sursa (job #2890786) | Cod sursa (job #295206) | Cod sursa (job #272102)
Cod sursa(job #272102)
type pnod=^nod;
nod=record
inf:longint;
adr:pnod;
v:boolean;
end;
var f,g:text;
i,n,m:longint;
s,ult:array[1..100000] of pnod;
t:array[1..100000] of longint;
viz:array[1..100000] of boolean;
nou,nou2,p,q:pnod;
procedure citire;
var x,y:longint;
begin
assign(f,'ciclueuler.in');
reset(f);
readln(f,n,m);
for i:=1 to m do begin
readln(f,x,y);
new(nou);
nou^.inf:=y;
nou^.v:=false;
new(nou2);
nou2^.inf:=x;
nou2^.v:=false;
if s[x]=nil then begin
s[x]:=nou;
ult[x]:=s[x];
end else begin
ult[x]^.adr:=nou;
ult[x]:=nou;
end;
if s[y]=nil then begin
s[y]:=nou2;
ult[y]:=s[y];
end else begin
ult[y]^.adr:=nou2;
ult[y]:=nou2;
end;
end;
t[1]:=-1;
close(f);
assign(g,'ciclueuler.out');
rewrite(g);
end;
procedure dfs(k:longint);
var p:pnod;
begin
viz[k]:=true;
write(g,k,' ');
if s[k]<>nil then begin
p:=s[k];
while p<>nil do begin
if (viz[p^.inf]) and (not p^.v) and (p^.inf<>1) then begin
p^.v:=true;
q:=s[p^.inf];
while (q^.inf<>k) or (q^.v=true) do q:=q^.adr;
q^.v:=true;
dfs(p^.inf);
{ if s[k]=p then s[k]:=s[k]^.adr
else begin
q:=s[k];
while q^.adr<>p do q:=q^.adr;
q^.adr:=p^.adr;
dispose(p);
p:=q;
end; }
end;
p:=p^.adr;
end;
p:=s[k];
while p<>nil do begin
if (viz[p^.inf]=false) and (p^.v=false) then begin
p^.v:=true;
q:=s[p^.inf];
while (q^.inf<>k) or (q^.v=true) do q:=q^.adr;
q^.v:=true;
dfs(p^.inf);
end;
p:=p^.adr;
end;
end;
end;
procedure afisare;
var n1,n2:longint;
begin
m:=0;
for i:=1 to n do
if not viz[i] then begin
rewrite(g);
write(g,-1);
close(g);
halt;
end;
if s[i]<>nil then begin
p:=s[i];
while p<>nil do begin
if p^.v=false then begin
m:=m+1;
if (m>2) or (n1<>1) and (n2<>1) then begin
rewrite(g);
write(g,-1);
close(g);
halt;
end;
end;
p:=p^.adr;
end;
end;
close(g);
end;
BEGIN
citire;
dfs(1);
afisare;
END.