Pagini recente » Cod sursa (job #164074) | Cod sursa (job #698720) | Cod sursa (job #287943) | Cod sursa (job #2783456) | Cod sursa (job #403769)
Cod sursa(job #403769)
#include<fstream.h>
int leg[1000100],ver[1000100],start[100010],c[100100],n,in[100100],st[500100],sol[500100];
bool pus[1000100],viz[100100];
int error()
{
int i;
for(i=1;i<=n;i++)
if(in[i]%2)
return 1;
int p=1,t;
c[++c[0]]=1;
viz[1]=1;
while(p<=c[0])
{
t=start[c[p]];
while(t)
{
if(!viz[ver[t]])
{
viz[ver[t]]=1;
c[++c[0]]=ver[t];
}
t=leg[t];
}
p++;
}
if(c[0]==n)
return 0;
return 1;
}
int main()
{
int i,m,x,y,q=0,t,p=0;
ifstream f("euler.in");
ofstream g("euler.out");
f>>n>>m;
while(m--)
{
f>>x>>y;
ver[++q]=y;
leg[q]=start[x];
start[x]=q;
ver[++q]=x;
leg[q]=start[y];
start[y]=q;
in[y]++;
in[x]++;
}
if(error())
{
g<<"-1";
return 0;
}
q=0;
st[++q]=1;
while(q)
{
t=start[st[q]];
if(t)
{
start[st[q]]=leg[t];
if(!pus[t])
{
pus[t]=1;
if(t%2)
pus[t+1]=1;
else
pus[t-1]=1;
st[++q]=ver[t];
}
}
else
sol[++p]=st[q--];
}
for(i=1;i<p;i++)
g<<sol[i]<<' ';
return 0;
}