Pagini recente » Cod sursa (job #1761277) | Cod sursa (job #533087) | Cod sursa (job #262579) | Cod sursa (job #97795) | Cod sursa (job #308834)
Cod sursa(job #308834)
#include<fstream>
#define N 100005
#define M 500005
using namespace std;
int nr=0,n,m,d[N],c[M],stvf[M],stvec[M],x[M],y[M];
int *a[N],*poz[N];
ofstream out ("ciclueuler.out");
void citire ()
{
ifstream in ("ciclueuler.in");
in>>n>>m;
for(int i=1;i<=m;i++)
{
in>>x[i]>>y[i];
d[x[i]]++;
if(x[i]!=y[i])
d[y[i]]++;
}
}
void aloc ()
{
for(int i=1;i<=n;i++)
{
a[i]=new int [1+d[i]];
a[i][0]=0;
poz[i]=new int [1+d[i]];
poz[i][0]=0;
}
}
void completez ()
{
int aux;
aux=m;
for(int i=1;i<=m;i++)
{
a[x[i]][++a[x[i]][0]]=y[i];
if(x[i]!=y[i])
{
a[y[i]][++a[y[i]][0]]=x[i];
poz[x[i]][a[x[i]][0]]=a[y[i]][0];
poz[y[i]][a[y[i]][0]]=a[x[i]][0];
}
}
}
void euler (int z)
{
int t,k=1;
stvf[k]=z;
stvec[k]=0;
while (k)
{
z=stvf[k];
if(stvec[k]<a[z][0])
{
t=a[z][++stvec[k]];
if(t==0)
continue;
a[z][stvec[k]]=0;
if(z!=t)
a[t][poz[z][stvec[k]]]=0;
stvf[++k]=t;
stvec[k]=0;
continue;
}
c[++nr]=z;
k--;
}
}
inline void scrie ()
{
for(int i=1;i<=nr-1;i++)
out<<c[i]<<" ";
}
int main ()
{
citire ();
aloc();
completez ();
euler(1);
if(m==nr-1 && c[1]==c[nr])
scrie ();
else
out<<-1;
out.close ();
return 0;
}